我是MS报道的新手.我想要实现的是制作一个简单的报告,该报告将由DataTable
(以编程方式)填写.我们的想法是将每个页面的数据分配给来自的值DataRow
.即报告页面1
将从中获取其TextBox
值DataTable.Rows[0]
,报告页面2
将显示值DataTable.Rows[1]
等.页数=数量DataRows
.
我编写了一个WinForms应用程序,该应用程序DataTable
从SQL 获取并根据用户提供的参数对其进行过滤,然后显示报告.
然后我创建了一个空的虚拟DataSet
调用ComplianceFormDataSet
,其中包含我将需要的所有字段名称.然后我做了一个.rdlc
,TextBox
用这个表达式添加了一个:
=Fields!CustomerCode.Value
以下是将数据传递给ReportViewer的逻辑:
DataTable MainDataTable = new DataTable(); MainDataTable.Columns.Add("CustomerCode", typeof(string)); MainDataTable.Rows.Add("Blah1"); MainDataTable.Rows.Add("Blah2"); ReportDataSource MainDataSource = new ReportDataSource("ComplianceFormDataSet", MainDataTable); MainReportViewer.LocalReport.DataSources.Clear(); MainReportViewer.LocalReport.DataSources.Add(MainDataSource); MainReportViewer.RefreshReport();
当我构建这个时,得到一个报告,一页说"Blah1"
.如何让它渲染两个页面:一个用于"Blah1"
,第二个用于"Blah2"
?谢谢.
好的,我想出来了:
将一个List元素添加到报表中并将其拉伸以填充报表正文.
将此List元素的Tablix链接到我的DataSet.
在List元素中添加TextBox元素.
选择TextBox元素的表达式:= Fields!CustomerCode.Value
右键单击外部报表正文,然后选择"查看" - >"分组".
添加行组.
在行组属性常规 - >在CustomerCode字段上添加分组.
在行组属性分页 - >选择分页符选项 - >在组的每个实例之间.
如果report始终生成一个包含空字段的额外页面 - 在XML查看器中打开.rdlc文件,找到分页符标记并将其删除.
很明显,不是吗?