在ReportViewer的DataSource中查看每个项目的一个报告页面?

时间:2016-03-13 01:01:21

标签: c# winforms rdlc reportviewer

如果我将一组对象分配给ReportViewer的DataSource,如何查看每个对象的一个​​报告页面?

我们说我有这样的代码来设置ReportViewer的数据源:

var invoice1 = new Invoice() { InvoiceNbr = 1 };
var invoice2 = new Invoice() { InvoiceNbr = 2 };

InvoiceBindingSource.DataSource = new List<Invoice>() { invoice1, invoice2 };
reportViewer1.RefreshReport();

假设reportViewer1绑定到绑定到我的Invoice自定义类的非常简单的RDLC报告。该报告有一个绑定到InvoiceNbr属性的文本框。

我的问题:如果我运行此代码,则ReportViewer只显示1页,而不是2页。仅显示InvoiceNbr 1.

思想: 如果我执行此代码,则绑定到InvoiceNbr属性的报表文本框必须是聚合值,例如= First(Fields!InvoiceNbr.Value,&#34; InvoiceGraphDataset&#34;)--- note :如果我改为使用Fields!InvoiceNbr.Value,我会收到一个设计时错误,说明该值必须是聚合表达式

我的问题重申: 那么,如何在ReportViewer中显示两个报表页面,在页面上显示InvoiceNbr 1,在另一个页面上显示InvoiceNbr 2?我可以在MS Access中轻松完成。

修改:I'm terrified this is the only answer。有人可以确认那里有比创建表格行/分页报告更好的方法吗?看起来应该有一种更直观的方法来为每个Invoice对象创建一个报告页面。救命?

1 个答案:

答案 0 :(得分:0)

有两种方法可以实现这一目标:

  • 使用一列表控件,在详细信息单元格中删除文本框,在InvoiceNbr字段中添加组(不带组页眉和页脚)并调整组属性以在新页面上打印每个组

  • 使用列表控件,在列表正文中删除文本框,并执行与上面选项相同的步骤。

在这两种方法中,我没有看到任何不直观的东西,底线 - 您需要在报告中找到一些能够识别创建新页面的时间,这些内容与页面更改标准绑定在您的数据源上