汇总¶
DataGridControl 允许针对单元格值计算汇总(聚合函数)。支持两种类型的汇总:
- 总计汇总,针对所有行计算。
- 分组汇总,在数据分组时针对各行分组计算。
汇总计算的主要功能包括:
- 内置汇总函数:Sum、Min、Max、Count 和 Average。
- 运行时管理 — 用户可以单击页脚单元格中的 Σ 按钮添加汇总,或打开 Summary Editor 对话框执行高级汇总操作。
- 每列多个汇总 — 每一列可以显示针对该列值计算的多个汇总。
- 跨列汇总 — 可以针对一列计算汇总,并在另一列中显示。
- 自定义汇总 — 可以处理
CustomSummary事件,按您自己的逻辑计算自定义聚合函数。
总计汇总¶
总计汇总针对所有行计算,并显示在控件的页脚中。
启用总计汇总¶
将 ShowTotalSummaries 属性设置为 true 可显示汇总页脚,从而启用总计汇总计算。汇总页脚显示在 DataGridControl 底部、所有行的下方。该页脚最初处于隐藏状态。
汇总页脚包含所有列的汇总单元格。如果启用了用户汇总自定义(默认启用),汇总单元格会包含 Σ 按钮,用于显示汇总菜单和汇总编辑器。
相关 API
ShowTotalSummaries— 获取或设置是否显示总计汇总页脚。TotalSummaryPanelMinHeight— 获取或设置总计汇总页脚的最小高度。
定义总计汇总¶
使用 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的列的标题。
分组汇总¶
当数据按列分组时,分组汇总允许您针对各行分组计算聚合函数。分组汇总显示在分组页脚中。
启用分组汇总¶
将 ShowGroupSummaries 属性设置为 true 可显示分组汇总页脚(最初处于隐藏状态),从而启用分组汇总计算。分组汇总页脚显示在所有行分组的下方。每个分组级别都有各自的页脚。
相关 API
ShowGroupSummaries— 获取或设置是否显示用于显示分组汇总的分组页脚。GroupSummaryRowMinHeight— 获取或设置分组页脚的最小高度。
定义分组汇总¶
使用 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的列的标题。
用户汇总自定义¶
默认情况下,用户可以编辑汇总。在此模式下,汇总单元格会显示 Σ 按钮,用于打开汇总菜单:
用户可以使用此菜单:
-
通过切换汇总函数旁边的复选框来添加或删除汇总。
-
选择
Customize打开Summary Editor对话框。在此对话框的
Summaries选项卡中,用户可以创建跨列汇总(针对一列计算但显示在另一列中的汇总)。在
Order选项卡中,用户可以更改现有汇总的显示顺序。
相关 API
AllowEditingTotalSummaries— 获取或设置用户是否可以编辑总计汇总。AllowEditingGroupSummaries— 获取或设置用户是否可以编辑分组汇总。
这些属性只影响用户修改汇总的能力,不影响在代码中执行的汇总计算。
自定义汇总¶
自定义汇总允许您使用自己的逻辑计算聚合值。可以定义自定义总计汇总和自定义分组汇总。
要添加自定义汇总,请执行以下操作:
-
创建一个
SummaryItem对象,并将其SummaryItem.SummaryType属性设置为Custom。- 要计算自定义总计汇总,请将此
SummaryItem添加到TotalSummaries集合。 - 要计算自定义分组汇总,请将此
SummaryItem添加到GroupSummaries集合。
- 要计算自定义总计汇总,请将此
-
处理
CustomSummary事件,为此SummaryItem手动计算值。设置
e.SummaryValue事件参数以提供您的自定义结果。处理
CustomSummary事件时,使用e.RowIndexes集合遍历目标行。该集合中的项指定用于计算自定义汇总的行的索引。计算自定义总计汇总时,索引指向 DataGrid 的所有行。计算自定义分组汇总时,会针对每个行分组引发 CustomSummary 事件,e.RowIndexes集合中的索引指向每个分组内的行。提示
行索引允许您在使用 DataGrid 的按行 API 时定位行(例如
DataGridControl.GetCellValue)
示例 - 计算自定义总计汇总¶
以下示例创建一个自定义总计汇总,用于计算金额超过 $1000 的订单数量。
<!-- 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
CustomSummary— 在计算汇总值时发生。使用SummaryValue事件参数提供自定义汇总值。
获取汇总值¶
可以使用以下方法在代码中获取已计算的汇总值:
DataGridControl.GetTotalSummaryValue— 返回总计汇总的已计算值。DataGridControl.GetGroupSummaryValue— 返回特定分组行的分组汇总的已计算值。rowIndex参数标识目标分组行的索引,该分组行的子行用于计算汇总。
object? totalValue = dataGrid.GetTotalSummaryValue(summaryItem);
// 获取第一个行分组的汇总值
int rowIndex = -1; // 指向第一个分组行。
object? groupValue = dataGrid.GetGroupSummaryValue(rowIndex, summaryItem);
* 本页面使用机器翻译技术翻译。







