C# WinForm(.NET 4.0)无数据库使用RDLC报表表格控件方法
无数据库实现RDLC报表多表格的方案(.NET Framework 4.0 WinForms)
嘿,刚好做过类似需求,不用数据库完全能搞定!咱们一步步来,操作起来很顺畅:
1. 创建强类型数据集(Strongly Typed DataSet)
这是最稳妥的方式,比弱类型DataSet更易维护:
- 在你的WinForms项目上右键 → 添加 → 新建项 → 选择数据集(DataSet.xsd),命名比如
ReportDataSet。 - 打开数据集设计器,右键空白处 → 添加 → DataTable,命名为
MultiTableData。 - 给这个DataTable添加列:
- 先加两个辅助列:
TableId(int类型,用来区分10个表格)、RowIndex(int类型,区分每个表格的3行) - 再加7个数据列,比如
Col1、Col2...Col7(类型根据你的需求选,string、decimal都可以)
- 先加两个辅助列:
2. 手动填充数据集数据
在PRINT子窗体的代码里,写个方法生成模拟数据(或者从你的业务逻辑取数):
private ReportDataSet GetReportData() { var ds = new ReportDataSet(); // 生成10个表格的3行数据 for (int tableNum = 1; tableNum <= 10; tableNum++) { for (int rowNum = 1; rowNum <= 3; rowNum++) { var row = ds.MultiTableData.NewMultiTableRow(); row.TableId = tableNum; row.RowIndex = rowNum; // 这里填充7列数据,替换成你的业务值即可 row.Col1 = $"表格{tableNum}行{rowNum}列1"; row.Col2 = $"表格{tableNum}行{rowNum}列2"; row.Col3 = $"表格{tableNum}行{rowNum}列3"; row.Col4 = $"表格{tableNum}行{rowNum}列4"; row.Col5 = $"表格{tableNum}行{rowNum}列5"; row.Col6 = $"表格{tableNum}行{rowNum}列6"; row.Col7 = $"表格{tableNum}行{rowNum}列7"; ds.MultiTableData.AddMultiTableRow(row); } } return ds; }
3. 设计RDLC报表
打开你的report.rdlc,按以下步骤设置:
- 首先添加数据集:在报表数据面板(没显示的话点视图→报表数据)→ 新建→数据集,选择刚才创建的
ReportDataSet,数据源选MultiTableData。 - 添加列表(List)控件到报表:这个列表用来按
TableId分组,自动生成10个表格。- 选中列表,在分组面板里添加分组,分组依据选
=Fields!TableId.Value,如果需要每个表格单独一页,勾选在组的每个实例之间分页。
- 选中列表,在分组面板里添加分组,分组依据选
- 在列表内部添加表格(Table)控件:
- 把表格调整为3行7列(对应你的需求)。
- 把表格细节行(中间行)的7个单元格分别绑定到
=Fields!Col1.Value到=Fields!Col7.Value。 - 要是需要表头,就给表格加表头行写上列名;不需要的话直接删掉表头。
- 确保表格的数据集绑定到
MultiTableData,这样每个TableId分组都会生成一个3行7列的表格。
4. 在窗体中绑定数据集到ReportViewer
在PRINT子窗体的Load事件里写绑定代码:
private void PRINT_Load(object sender, EventArgs e) { var reportData = GetReportData(); // 清除原有数据源 reportViewer1.LocalReport.DataSources.Clear(); // 添加新数据源,名字要和RDLC里的数据集名字完全一致 reportViewer1.LocalReport.DataSources.Add( new ReportDataSource("MultiTableData", reportData.MultiTableData)); // 刷新报表 reportViewer1.RefreshReport(); }
额外小贴士
- 要是不想用分组,也可以创建10个独立的DataTable,每个填充3行7列数据,然后在RDLC里给10个表格分别绑定不同的DataTable,但这种方式维护起来比较麻烦,不如分组灵活。
- 注意.NET Framework 4.0的ReportViewer控件版本要对应,避免出现兼容性问题。
- 表格的样式(边框、字体、背景色)都可以在RDLC的表格属性里设置,甚至用表达式动态控制。
内容的提问来源于stack exchange,提问作者User0804
相关产品推荐
相关产品推荐

