您可以使用子报表和钻取报表将相关报表链接在一起。
-
子报表是在父报表的表体内嵌入其他报表的项。从概念上讲,子报表类似于为其他网页内容提供容器的网页中的框架。子报表呈现在包含它的父报表内。同时处理和显示这两个报表。
-
钻取报表是在希望支持指向其他相关报表的钻取链接时创建的一种报表。通常,钻取报表通过数据与父报表关联。举一个常见的钻取报表的示例:包含指向当月各个销售订单的链接的 Monthly Sales 报表。当您单击钻取链接时,父报表将被含有支持详细信息的其他报表替代。
钻取报表和子报表均支持父报表和子报表的概念。若要关联这些报表,必须创建报表参数以传递用来建立关系的数据。若要在运行时链接这些报表,必须编写支持该连接的代码。在部署相关报表时,请确保客户端报表定义 (.rdlc) 文件都存储在文件系统上的同一文件夹中。
下列事件提供示例代码,说明如何实现子报表和钻取操作:
添加子报表
子报表及其父报表应通过共享的参数进行关联。必须为每个报表添加参数。在向父报表添加子报表之前必须配置这些参数。添加子报表时,需要设置父报表以向子报表传递参数。
添加子报表
-
在图形设计模式下打开客户端报表定义 (.rdlc) 文件。
-
在工具箱中,单击“子报表”。
-
在设计图面上,拖动一个框,根据需要调整子报表的大小。或者,可以单击设计图面来创建固定大小的子报表。
注意
如果项目中已经存在子报表,则可以将该报表从解决方案资源管理器拖到设计图面来创建子报表。
-
右键单击子报表,再单击“属性”。
-
在“子报表”中,选择希望在子报表区域中显示的报表。
-
在“参数”选项卡中,执行以下操作:
-
在“参数名称”中,键入子报表中的参数的名称。此名称必须与 ReportName 属性中命名的报表的报表参数的名称匹配。
-
在“参数值”中,键入要传递给子报表的值。此值可以是静态文本,也可以是指向父报表中的某字段或其他对象的表达式。
-
-
重复步骤 2 添加要传递给子报表的其他参数。
![]() |
---|
子报表需要的所有参数都必须包括在“参数”列表中。如果缺少必需的参数,子报表将不会正确显示在父报表内。 |
若要为子报表提供数据,应用程序必须处理 LocalReport 对象的 SubreportProcessing 事件。SubreportProcessingEventArgs 是传递给 SubreportProcessing 事件处理程序方法的参数之一。在事件处理程序中,应用程序将检查使用 SubreportProcessingEventArgs 的 Parameters 属性传递给子报表的参数值。然后,应用程序必须使用 SubreportProcessingEventArgs 的 DataSources 属性为子报表提供数据。
配置钻取报表
通过定义可从父报表导航到含有支持数据的子报表的钻取操作,可以配置钻取报表。
钻取报表通常包含由父报表传递给它的参数。以销售情况汇总报表为例,钻取报表中就含有一个以订单作为值的参数。该汇总报表中含有与每个订单编号相对应的钻取报表链接。单击此链接将打开包含详细信息的目标报表,并向其传递相应的订单 ID。
任何存储在报表服务器中的报表都可以成为钻取报表。只能给文本框和图像添加钻取链接。
添加钻取报表链接
-
在图形设计模式下打开客户端报表定义 (.rdlc) 文件。
-
右键单击要向其添加链接的文本框或图像,再单击“属性”。
-
在“导航”选项卡中,选择“跳至报表”。
-
键入或选择报表名称。报表必须是位于同一项目中的 .rdlc 文件。
-
若要设置传递给钻取报表的参数,请单击“参数”,然后执行以下操作:
-
在“参数名称”中,键入钻取报表中的报表参数的名称。
注意
参数列表中的名称必须与目标报表中的预期参数名称完全匹配。如果名称不匹配,或者未列出某个预期的参数,钻取报表将出错。
-
在“参数值”中,键入或选择要传递给钻取报表的参数的值。
注意
值可以包含计算结果为传递给报表参数的值的表达式。值列表中的表达式包括当前报表的字段列表。
-
若要为钻取报表提供数据,应用程序必须处理 ReportViewer 对象的 Drillthrough 事件。DrillthroughEventArgs 是传递给 Drillthrough 事件处理程序方法的参数之一。DrillThroughEventArgs 具有一个 Report 属性,该属性用来表示钻取报表。在事件处理程序中,宿主应用程序可以通过对钻取报表调用 GetParameters() 方法来检查传递给钻取报表的参数的值。然后,宿主应用程序必须使用钻取报表的 DataSources 属性为钻取报表提供数据。