有一个报表的数据源是一个对象的List, 这个对象List中还有层级,其中还有其他的对象List,这样的层级有三层。其数据是从数据库中取出来的。其LINQ的操作太多了而且复杂,所以不太可 能从LINQ中挖掘出SQL语句了,只能从这个对象List作为报表数据源。报表是SSRS 2008R2版本的,自定义对象绑定到报表上,只能用LocalReport模式了,即RDLC的方式。在相关类上定义一个Public,返回 list<相关类> 的方法, 然后在RDLC的report data窗口中就可加dataset, 数据连接处就可选择对应的名称空间。然后返回list<相关类>的方法就可以选择了。这样就将自定义对象加入了报表作为数据源。之后就可以将 这个数据往报表里布局。这个相对简单就不多说。
在调用报表的时候需要new 一个ReportDataSource对象,然后将此ReportDataSource对象Add到报表的DataSources属性中。至于下一层级, 我们得在此报表中加入子报表。然后定义一个Subreportprocessing的事件处理程序,在此事件处理程序中将子报表所需要的数据对象绑定到子 报表。子报表所需要的数据对象是在最上一层的对象中的,是其属性只一。取出,然后绑定。对于三层的数据对象结构,即子报表里还得有子报表。绑定子报表里的子报表需要同样在Subreportprocessing事件处理程序中处理。