如果某个报表被用于显示分层级的数据源中的数据,则通常把它称为 主/从 报表。 本文档描述了在 XtraReports 中创建主/从报表的两种主要方法。 第一种方法 是以使用 从报表 带区为基础,当数据源包含主实例和从实例之间的 ADO.NET 关系时,使用这种方法。 第二种方法 是创建两个不同的报表类,并且把从报表作为子报表而合并到主报表中。
使用从报表带区
除去普通用途的所有 报表带区 以外,XtraReports 还引入了 DetailReportBand 从报表带区类型。 这种带区被特别设计用于在主报表中呈现从报表,并且在下列情况下可以被使用: 当报表的数据源实现了在绑定到主报表的对象和绑定到从报表的对象之间的主/从 ADO.NET 关系时。
这种方法比使用 子报表 更先进,因为它允许在相同的类文件中同时存储主报表和从报表。 此外,由于 DetailReportBand(从报表带区) 存在于与主报表的其他带区相同的带区集合之中,因此允许在相同的 报表设计器 中显示从报表的带区。
从报表带区相互嵌套的数目不受限制,如下图所示。
注意 |
---|
可以把多个从报表添加在相同的嵌套级别中。 |
在设计时刻,要添加 DetailReportBand(从报表带区),则只需要使用鼠标右键单击报表,并且选择 Insert Detail Report(插入从报表) 上下文菜单 项。 如果 ADO.NET 关系存在于报表的 绑定 数据源中,那么子菜单将包含一个有关系名称的菜单项。
注意 |
---|
提示: 也可以添加非绑定从报表,并且在后面指定其主要属性。 例如,请参阅 如何: 把报表绑定到不同的数据源。 |
要把 从报表 绑定到报表数据源的从表数据,则设置所创建 DetailReportBand(从报表带区) 的下列属性:
- XtraReportBase.DataSource 应被设置为与 主报表 相同的数据源。 如果此属性值被设置为 null(在 Visual Basic 中为 Nothing),那么将使用父报表的 XtraReportBase.DataSource 属性。
- XtraReportBase.DataAdapter 应被设置为为报表提供 从表 数据的数据适配器。 通常它与 主报表 的数据适配器不同。
- XtraReportBase.DataMember 应被设置为在绑定数据源中所使用的数据关系的名称。
下面的插图举例说明了 Visual Studio IDE 中的这些属性。
注意 |
---|
因为圆点被 XtraReports 用于分隔数据关系中不同数据项的名称,因此在数据成员名称中要避免使用。 |
要查看使用 DetailReportBand(从报表带区) 的详细的按步骤操作的示例,请参阅下列指南:
把从报表嵌入为子报表
如果绑定到主报表的数据源不包含 ADO.NET 关系,或者您更喜欢在不同的文件中存储主报表和从报表(例如,在不同的主/从报表中重用从报表时),那么就可以使用 子报表 来把从报表嵌入到主报表中。
注意 |
---|
通常,使用 子报表 来创建主/从报表,比使用 DetailReportBands(从报表带区) 更复杂。 如果可以为您在这两种技术之间进行选择,那么我们推荐使用 DetailReportBands。 |
使用子报表创建主/从报表需要下列操作:
- 首先,需要创建两个报表类 (主报表和从报表),并且把它们都 绑定到数据。 注意,这两个报表的数据源都应该包含一个有相同“键”的数据列,从而可以从主报表向从报表传递。
- 对于从报表,需要创建一个公共的 参数,此参数在从报表外部被初始化。 此参数应该被用于根据包含“键”的列 筛选绑定到从报表的数据源。
- 然后,应该通过 XRSubreport 控件把从报表嵌入到主报表中。 另外,需要接管它的 XRControl.BeforePrint 事件,并且把一个“键”值由主报表传递到从报表。
- 预览、打印、导出 或 在 Web 上发布报表 (在运行时刻)。
注意 |
---|
在 Visual Studio 设计时刻,使用 XRSubreport 控件创建的主/从报表不能被预览,因为在其创建期间内它使用事件处理。 |
要查看使用子报表创建主/从报表的详细的按步骤操作的示例,请参阅下列指南: