跳转至

汇总

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>

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

相关 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.ShowInColumn — 获取或设置显示汇总值的列的字段名。如果未设置此属性,汇总将显示在绑定到 FieldName 的列中。
  • SummaryItem.SummaryType — 获取或设置聚合函数的类型(Sum、Min、Max、Count 或 Average)。
  • SummaryItem.Label — 获取或设置要显示的自定义标签,用于代替默认汇总标签。默认汇总标签显示汇总函数。如果汇总与另一列相关联(请参阅 ShowInColumn),汇总标签还会显示绑定到 SummaryItem.FieldName 的列的标题。

分组汇总

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

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.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 集合中的索引指向每个分组内的行。

    提示

    行索引允许您在使用 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);



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