Reporting Service2005---主从报表
本文的目的在于记录本人在学习Reporting Service过程中所积累的一些经验,以方便以后的工作及给初学Reporting Service兄弟们做一个参考.由于本人文采不好,下面就用一个简单的例子来示范Reporting Service中主从报表的做法
以一个查询供应商商品明细的报表为例,主表是供应商的基本信息,如供应商编号,名称,地址,电话等等,子表是该供应商对应的所有商品。首先我们必须先做好这张查询供应商基本信息的主表。数据源就用公共数据源,在数据集的查询语句中设置一个查询参数即供应商编号(@ProviderNo),这个参数我设置为多值参数,这样就允许同时可以查询多个供应商,可以专门新建一个数据集来做为这个参数的可选值列表,因此参数的可用值和默认值都设置为“来自查询”,如果将默认值设置为“来自查询”,并指定一个数据集和字段后,则该报表生成的时候报表参数的默认值就是参数中指定的数据集查询出来的该字段的所有值。
Reporting Service对具有多值参数的select查询语句还有个限制,即如果该查询参数是个多值参数,则该参数必须是包含在 IN 语句中,如 : select * from tableName where c_id in (@ParamName)
接下来就是做子报表,即某个供应商的商品明细,子报表可以和主表公用数据源,数据集的查询语句也设置一个查询参数,即供应商的编号(@ProviderNo),对于子报表的查询参数没有特别的要求,查询的可用值设置为“无查询”,默认值设置为“空值”就可以了。还有一点要注意:子报表的表体(table)的location.top要设置为0,否则会出现子报表和主报表的数据行之间会产生空隙。
下面就是关键步骤,将子报表嵌入主报表中。在主报表的数据区域中增加一行,并合并新增行的单元格,将ToolBox中的Subreport控件拖入该行中。
右键点击Subreport选中"属性"菜单项,在随即出现的对话框中设置该子报表的属性,在“常规”选项页中的子报表栏中选择要嵌入的子报表;
“可见性”页面中可以选择子报表在报表预揽页中初始是否可见,如果将“初始可见性”设为“隐藏”则可以在“报表项”中选择用户点了主表中的某个字段后显示子报表;
在“参数”页面中可以为子报表的参数值设置来源,这里我选择主报表中的供应商编号的字段。
此时一张简单的主从报表就做好了。但我发现Reporting Service的主从报表有个大缺陷,即当子报表不显示的时候,放置子报表控件(Subreport)的空间并没有随即也缩回隐藏,而是空了一片在那里,这不知道是Reporting Service中没有处理到,还是有属性可设置而我没有发现呢。