跳转至

汇总

DataGridControl 允许针对单元格值计算汇总(聚合函数)。支持两种类型的汇总:

  • 总计汇总,针对所有行计算。
  • 分组汇总,在数据分组时针对各行分组计算。

grid-summaries

汇总计算的主要功能包括:

  • 内置汇总函数:Sum、Min、Max、Count 和 Average。
  • 运行时管理 — 用户可以单击页脚单元格中的 Σ 按钮添加汇总,或打开 Summary Editor 对话框执行高级汇总操作。
  • 每列多个汇总 — 每一列可以显示针对该列值计算的多个汇总。
  • 跨列汇总 — 可以针对一列计算汇总,并在另一列中显示。
  • 自定义汇总 — 可以处理 CustomSummary 事件,按您自己的逻辑计算自定义聚合函数。

总计汇总

总计汇总针对所有行计算,并显示在控件的页脚中。

grid-total-summaries

启用总计汇总

将 ShowTotalSummaries 属性设置为 true 可显示汇总页脚,从而启用总计汇总计算。汇总页脚显示在 DataGridControl 底部、所有行的下方。该页脚最初处于隐藏状态。

<mxdg:DataGridControl x:Name="dataGrid" ShowTotalSummaries="True">...</mxdg:DataGridControl>

汇总页脚包含所有列的汇总单元格。如果启用了用户汇总自定义(默认启用),汇总单元格会包含 Σ 按钮,用于显示汇总菜单和汇总编辑器。

grid-summaries-sigma-button

相关 API

定义总计汇总

使用 TotalSummaries 集合定义总计汇总。该集合中的项由 SummaryItem 类封装。每个 SummaryItem 对象指定要汇总的字段、汇总类型、显示结果的列以及其他设置。

xmlns:mxdc="clr-namespace:Eremex.AvaloniaUI.Controls.DataControl;assembly=Eremex.Avalonia.Controls"

<mxdg:DataGridControl x:Name="dataGrid" ShowTotalSummaries="True">
    <mxdg:DataGridControl.TotalSummaries>
        <mxdc:SummaryItem FieldName="Name" SummaryType="Count" />
        <mxdc:SummaryItem FieldName="SaleDate" SummaryType="Min" ShowInColumn="Total" />
        <mxdc:SummaryItem FieldName="SaleDate" SummaryType="Max" ShowInColumn="Total" />
        <mxdc:SummaryItem FieldName="Price" SummaryType="Min" />
        <mxdc:SummaryItem FieldName="Price" SummaryType="Max" />
        <mxdc:SummaryItem FieldName="Quantity" SummaryType="Average" />
        <mxdc:SummaryItem FieldName="Total" SummaryType="Sum" />
    </mxdg:DataGridControl.TotalSummaries>
</mxdg:DataGridControl>

相关 API

  • TotalSummaries — 提供对定义总计汇总的汇总项(SummaryItem 对象)集合的访问。
  • SummaryItem.FieldName — 获取或设置其值用于计算汇总的数据字段的名称。
  • SummaryItem.Name — 获取或设置汇总项的名称,用于标识该汇总项。可以按名称从 TotalSummaries 集合中检索汇总项。
  • SummaryItem.Tag — 获取或设置与此 SummaryItem 关联的自定义数据。
  • SummaryItem.ShowInColumn — 获取或设置显示汇总值的列的字段名。如果未设置此属性,汇总将显示在绑定到 FieldName 的列中。
  • SummaryItem.SummaryType — 获取或设置聚合函数的类型(Sum、Min、Max、Count 或 Average)。
  • SummaryItem.Label — 获取或设置要显示的自定义标签,用于代替默认汇总标签。默认汇总标签显示汇总函数的名称。如果汇总与另一列相关联(请参阅 ShowInColumn),汇总标签还会显示绑定到 SummaryItem.FieldName 的列的标题。

    grid-summaries-labels

分组汇总

当数据按列分组时,分组汇总允许您针对各行分组计算聚合函数。分组汇总显示在分组页脚中。

grid-group-summaries

启用分组汇总

将 ShowGroupSummaries 属性设置为 true 可显示分组汇总页脚(最初处于隐藏状态),从而启用分组汇总计算。分组汇总页脚显示在所有行分组的下方。每个分组级别都有各自的页脚。

<mxdg:DataGridControl x:Name="dataGrid" ShowGroupSummaries="True">...</mxdg:DataGridControl>

相关 API

定义分组汇总

使用 GroupSummaries 集合定义分组汇总。与 TotalSummaries 集合一样,GroupSummaries 集合中的项由 SummaryItem 类表示。每个 SummaryItem 对象指定要汇总的字段、汇总类型、显示结果的列以及其他设置。

<mxdg:DataGridControl x:Name="dataGrid" ShowGroupSummaries="True">
    <mxdg:DataGridControl.GroupSummaries>
        <mxdc:SummaryItem FieldName="OrderId" SummaryType="Count" />
        <mxdc:SummaryItem FieldName="Quantity" SummaryType="Sum" />
        <mxdc:SummaryItem FieldName="TotalPrice" SummaryType="Sum" />
        <mxdc:SummaryItem FieldName="TotalPrice" SummaryType="Average" />
    </mxdg:DataGridControl.GroupSummaries>
</mxdg:DataGridControl>

相关 API

  • GroupSummaries — 提供对定义分组汇总的汇总项(SummaryItem 对象)集合的访问。
  • SummaryItem.FieldName — 获取或设置其值用于计算汇总的数据字段的名称。
  • SummaryItem.Name — 获取或设置汇总项的名称,用于标识该汇总项。可以按名称从 GroupSummaries 集合中检索汇总项。
  • SummaryItem.Tag — 获取或设置与此 SummaryItem 关联的自定义数据。
  • SummaryItem.ShowInColumn — 获取或设置显示汇总值的列的字段名。如果未设置此属性,汇总将显示在绑定到 FieldName 的列中。
  • SummaryItem.SummaryType — 获取或设置聚合函数的类型(Sum、Min、Max、Count 或 Average)。
  • SummaryItem.Label — 获取或设置要显示的自定义标签,用于代替默认汇总标签。默认汇总标签显示汇总函数的名称。如果汇总与另一列相关联(请参阅 ShowInColumn),汇总标签还会显示绑定到 SummaryItem.FieldName 的列的标题。

用户汇总自定义

默认情况下,用户可以编辑汇总。在此模式下,汇总单元格会显示 Σ 按钮,用于打开汇总菜单:

grid-summaries-summary-menu

用户可以使用此菜单:

  • 通过切换汇总函数旁边的复选框来添加或删除汇总。

    grid-summaries-summary-menu-multiple-items

  • 选择 Customize 打开 Summary Editor 对话框。

    grid-summaries-summary-editor

    在此对话框的 Summaries 选项卡中,用户可以创建跨列汇总(针对一列计算但显示在另一列中的汇总)。

    在 Order 选项卡中,用户可以更改现有汇总的显示顺序。

    grid-summaries-summary-editor-order-tab

相关 API

这些属性只影响用户修改汇总的能力,不影响在代码中执行的汇总计算。

自定义汇总

自定义汇总允许您使用自己的逻辑计算聚合值。可以定义自定义总计汇总和自定义分组汇总。

要添加自定义汇总,请执行以下操作:

  • 创建一个 SummaryItem 对象,并将其 SummaryItem.SummaryType 属性设置为 Custom。

  • 处理 CustomSummary 事件,为此 SummaryItem 手动计算值。

    设置 e.SummaryValue 事件参数以提供您的自定义结果。

    处理 CustomSummary 事件时,使用 e.RowIndexes 集合遍历目标行。该集合中的项指定用于计算自定义汇总的行的索引。计算自定义总计汇总时,索引指向 DataGrid 的所有行。计算自定义分组汇总时,会针对每个行分组引发 CustomSummary 事件,e.RowIndexes 集合中的索引指向每个分组内的行。

    当针对分组汇总触发 CustomSummary 事件时,事件的 IsGroupSummary 参数返回 true,GroupRowIndex 参数指定正在处理的分组行的索引。

    提示

    行索引允许您在使用 DataGrid 的按行 API 时定位行(例如 DataGridControl.GetCellValue)

示例 - 计算自定义总计汇总

以下示例创建一个自定义总计汇总,用于计算金额超过 $1000 的订单数量。

grid-summaries-custom-summary-example

<!-- XAML -->
<mxdg:DataGridControl x:Name="dataGrid" CustomSummary="OnCustomSummary">
    <mxdg:DataGridControl.TotalSummaries>
        <mxdc:SummaryItem FieldName="Total" SummaryType="Custom" Label="Count (Total > $1000)" />
    </mxdg:DataGridControl.TotalSummaries>
</mxdg:DataGridControl>
// Code-behind
void OnCustomSummary(object sender, DataGridCustomSummaryEventArgs e)
{
    int largeOrdersCount = 0;
    foreach (int rowIndex in e.RowIndexes)
    {
        if ((decimal)dataGrid.GetCellValue(rowIndex, e.SummaryItem.FieldName) > 1000m)
            largeOrdersCount++;
    }
    e.SummaryValue = largeOrdersCount.ToString();
}

相关 API

获取汇总值

可以使用以下方法在代码中获取已计算的汇总值:

object? totalValue = dataGrid.GetTotalSummaryValue(summaryItem);

// 获取第一个行分组的汇总值
int rowIndex = -1; // 指向第一个分组行。
object? groupValue = dataGrid.GetGroupSummaryValue(rowIndex, summaryItem);



* 本页面使用机器翻译技术翻译。