本指南描述了计算 自定义汇总 的步骤。 在本例中,我们将显示每组中产品部件包的总数。 要查看总说明,请参阅 计算汇总。
-
创建一个 表格报表,把它绑定到 Northwind 示例数据库 (与 XtraReports 安装一起提供的 nwind.mdb 文件) 的 "Products" 表。 在本指南中,我们以下面的报表开始。
此报表被按照 CategoryID 数据字段 分组,并且它的 GroupHeader(分组标头) 带区是空白的。
-
为了在每个组的底部都显示汇总值,而把一个 GroupFooter 带区添加到报表,例如,使用 Group and Sort 面板 …
… 并从 Field List(字段列表) 中把 UnitsOnOrder 字段拖放到所创建的带区中。
-
然后,单击标签的 智能标记,并在它的操作列表中,单击 XRLabel.Summary 属性的省略号按钮。
在被调用的 Summary Editor 中,把 Summary function(汇总函数) 设置为 Custom。 同时,在 Summary Running 部分选中 Group,从而对报表中的每个分组都计算合计值。
另外,还可以指定汇总函数的 格式字符串。 注意,取值的格式设置被独立应用于汇总值,并且比一般的格式设置有更高的优先级。
单击 OK 按钮应用设置并关闭对话框。
-
当选择 SummaryFunc.Custom 选项时,有三个事件被添加到标签的事件列表: XRLabel.SummaryGetResult、XRLabel.SummaryReset 和 XRLabel.SummaryRowChanged。
以下列方式接管这些事件。
C# 复制代码 // Declare a summary and a pack. double totalUnits = 0; double pack = 15; private void xrLabel1_SummaryReset(object sender, EventArgs e) { // Reset the result each time a group is printed. totalUnits = 0; } private void xrLabel1_SummaryRowChanged(object sender, EventArgs e) { // Calculate a summary. totalUnits += Convert.ToDouble(GetCurrentColumnValue("UnitsOnOrder")); } private void xrLabel1_SummaryGetResult(object sender, SummaryGetResultEventArgs e) { // Round the result, so that a pack will be taken into account // even if it contains only one unit. e.Result = Math.Ceiling(totalUnits / pack); e.Handled = true; }
Visual Basic 复制代码 ' Declare a summary and a pack. Private totalUnits As Double = 0 Private pack As Double = 15 Private Sub xrLabel1_SummaryReset(ByVal sender As Object, ByVal e As EventArgs) _ Handles xrLabel1.SummaryReset ' Reset the result each time a group is printed. totalUnits = 0 End Sub Private Sub xrLabel1_SummaryRowChanged(ByVal sender As Object, ByVal e As EventArgs) _ Handles xrLabel1.SummaryRowChanged ' Calculate a summary. totalUnits += Convert.ToDouble(GetCurrentColumnValue("UnitsOnOrder")) End Sub Private Sub xrLabel1_SummaryGetResult(ByVal sender As Object, _ ByVal e As SummaryGetResultEventArgs) Handles xrLabel1.SummaryGetResult ' Round the result, so that a pack will be taken into account ' even if it contains only one unit. e.Result = Math.Ceiling(totalUnits / pack) e.Handled = True End Sub
现在报表已经就绪。 运行打印预览窗体,并查看结果。
要为 最终用户设计器 提供此功能,则应该接管相应的 脚本事件,在 通过脚本计算自定义汇总 主题中描述了这些事件。
关于如何按照 自定义 汇总函数的结果对分组排序的示例,请在我们的代码中心参阅下面的示例: How to sort groups by a custom summary function result。