本指南描述了计算 自定义汇总 的步骤。 在本例中,我们将显示每组中产品部件包的总数。 要查看总说明,请参阅 计算汇总

  1. 创建一个 表格报表,把它绑定到 Northwind 示例数据库 (与 XtraReports 安装一起提供的 nwind.mdb 文件) 的 "Products" 表。 在本指南中,我们以下面的报表开始。

    此报表被按照 CategoryID 数据字段 分组,并且它的 GroupHeader(分组标头) 带区是空白的。

  2. 为了在每个组的底部都显示汇总值,而把一个 GroupFooter 带区添加到报表,例如,使用 Group and Sort 面板

    … 并从 Field List(字段列表) 中把 UnitsOnOrder 字段拖放到所创建的带区中。

  3. 然后,单击标签的 智能标记,并在它的操作列表中,单击 XRLabel.Summary 属性的省略号按钮。

    在被调用的 Summary Editor 中,把 Summary function(汇总函数) 设置为 Custom。 同时,在 Summary Running 部分选中 Group,从而对报表中的每个分组都计算合计值。

    另外,还可以指定汇总函数的 格式字符串。 注意,取值的格式设置被独立应用于汇总值,并且比一般的格式设置有更高的优先级。

    单击 OK 按钮应用设置并关闭对话框。

  4. 当选择 SummaryFunc.Custom 选项时,有三个事件被添加到标签的事件列表: XRLabel.SummaryGetResultXRLabel.SummaryResetXRLabel.SummaryRowChanged

    以下列方式接管这些事件。

    C#CopyCode image复制代码
    // 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 BasicCopyCode image复制代码
    ' 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

Expand image参阅