本主题提供了在 XtraReports 中对数据分组的总说明,并提供了设计时刻和运行时刻示例。 对数据分组允许按照一个字段或多个字段中的相同值,把数据分成多个组。 注意,只可以对 绑定报表 应用分组。
本文档由下列小节组成:
分组概述
要启用报表分组,则应该把一个 GroupHeaderBand(分组标头带区) 添加到报表中。 GroupHeaderBand 可以伴有一个 GroupFooterBand(分组脚注带区),并且通过 GroupBand.Level 属性 (此属性值相同的分组标头带区和分组脚注带区属于同一个数据分组) 使二者相关联。 GroupHeader 和 GroupFooter 带区被打印若干次,打印次数与分组字段的不同组合数相当。
因此,至少要把一个 GroupField 对象 (分组标准) 通过 GroupHeaderBand.GroupFields 属性,而添加到 GroupHeader 带区的分组字段集合中。 对于分组字段,指定它的 GroupField.FieldName 属性,此属性确定执行分组的数据成员的名称。
注意 |
---|
因为数据分组只能用于已指派数据源的报表,因此可以从 XtraReportBase.DataSource 和 XtraReportBase.DataMember 属性指定的对象中获取分组字段的数据成员。 这意味着也可以把 计算字段 指定为分组字段,从而允许根据复杂的条件执行分组。 相关示例,请参阅 如何: 实现自定义分组。 |
在 Visual Studio 设计时刻 (或在 最终用户设计器 中),对数据分组的最省事的方式,是使用 Group and Sort 面板。
相关的详细操作步骤,请参阅 如何: 对数据分组。
当 XtraReports 按照指定的分组字段对数据源中的数据进行分组时,也按照分组字段 对数据排序。 排序顺序 (升序或降序) 是由 GroupField.SortOrder 属性指定的。 同时,当应用分组时,不保存数据源中的原有顺序记录。 因此,要按照自定义顺序对组中的记录排序,则应该把一个辅助列添加到数据源中,并把它用于排序。
注意 |
---|
可以按照汇总函数的结果对组进行排序。 要获得相关信息,请参阅 对数据排序。 |
可以按照 多个 数据字段对数据分组,并且有两种不同的方式:
-
创建一个 GroupHeaderBand,并把多个分组字段指派到它的 GroupHeaderBand.GroupFields 集合中。 在这种方式中,按照这些分组字段值的不同组合对数据分组。
-
创建多个 GroupHeaderBand 对象,并为每个分组带区指定不同的分组字段。 在这种情况下,我们将得到嵌套的报表数据组。 在这种场景中,嵌套级别是由 GroupHeaders 带区的 GroupBand.Level 属性指定的: 此属性值越大,则 GroupHeader 带区有更高的级别。 注意,对于不同的 GroupHeader 带区,此属性的值不可能相同; 为一个 GroupHeader 带区设置此属性,会导致同时自动调整其他 GroupHeaders 带区的此属性。
下面的插图说明了这两种多次分组的方法。
GroupHeader 带区有多个分组字段 | 嵌套的 GroupHeader 带区 |
---|---|
分组选项
在对数据分组时,下列选项可用:
-
分组布局
使用 GroupHeaderBand.GroupUnion 属性,来指定分组行是否可以被打印在不同的页面上 (在这种情况下,GroupHeaderBand.GroupUnion 和 GroupFooterBand.GroupUnion 属性都被设置为 None),还是把整个分组打印在一页上 (如果 GroupHeaderBand.GroupUnion 属性值被设置为 WholePage)。
然而,如果允许跨页拆分报表组,但是当报表组下面没有数据行时 (如果报表组在页面底部开始,并且剩余空间不足以打印一个 GroupHeader),您不想把一个 GroupHeader 打印在一个页面上,那么可以把 GroupHeaderBand.GroupUnion 属性设置为 WithFirstDetail。 在这种情况下,如果 GroupHeader 单独在一页上,那么它将被移到下一页的开始处。
要决定分组带区是否可以被跨页拆分,则使用它的 Band.KeepTogether 属性,此属性指定是否可以横向跨页拆分带区的内容。 换句话说,如果带区的内容大于页面的剩余空间,那么此属性指定是否把带区内容跨页拆分到当前页和下一页,或者是否在下一页完整打印带区。 注意,仅当当前页面不能容纳带区内容时,此属性才起作用。
如果在下一页仍然不能完整打印带区 (没有足够的空间来使所有带区内容保持在一起),那么将拆分它,就像是此属性的值被设置为 false。
-
分组标头分布
要决定分组带区是否只在出现该组的首个页面上显示,还是在打印分组的每个页面上都显示,则使用 GroupBand.RepeatEveryPage 属性。 注意,相同组中的 GroupHeaderBand 和 GroupFooterBand 对象都有此属性,它们是各自起作用的。
-
页码
要让报表显示各个组的页码,则把 XRPageInfo 控件放置到 GroupHeader (或 GroupFooter) 带区,并把控件的 XRPageInfo.RunningBand 属性设置为 GroupHeader 带区的名称。
注意,为了使页码保持准确,需要在同一个页面上不能同时出现多个组。 要避免此问题,应该把 GroupHeader 带区的 Band.PageBreak 属性设置为 AfterBand,或者把 XRPageBreak 控件放置到带区的底部。 要获得更多相关信息,请参阅 如何: 为分组插入页码。
示例
可以参阅下列与数据分组相关的按步骤操作指南。