汇总¶
TreeList 控件允许针对列计算总计汇总。总计汇总是针对所有行计算的聚合函数。控件必须能够同时访问所有行,才能正确计算总计汇总。
注意
将 AllowDynamicDataLoading 属性设置为 false 可禁用动态数据加载,使 TreeList 控件能够同时访问所有行。
汇总计算的主要功能包括:
- 内置汇总函数:Sum、Min、Max、Count 和 Average。
- 运行时管理 — 用户可以单击页脚单元格中的 Σ 按钮添加汇总,或打开 Summary Editor 对话框执行高级汇总操作。
- 每列多个汇总 — 每一列可以显示针对该列值计算的多个汇总。
- 跨列汇总 — 可以针对一列计算汇总,并在另一列中显示。
- 自定义汇总 — 可以处理
CustomSummary事件,按您自己的逻辑计算自定义聚合函数。
启用总计汇总¶
总计汇总显示在控件的页脚中。
将 ShowTotalSummaries 属性设置为 true,即可显示汇总页脚并启用总计汇总计算。汇总页脚位于 TreeListControl 底部、所有行之下。该页脚默认处于隐藏状态。
<mxtl:TreeListControl x:Name="treeList" ShowTotalSummaries="True" AllowDynamicDataLoading="False">...</mxtl:TreeListControl>
汇总页脚包含所有列的汇总单元格。如果启用了用户汇总自定义(默认启用),汇总单元格会包含 Σ 按钮,用于显示汇总菜单和汇总编辑器。
相关 API
ShowTotalSummaries— 获取或设置是否显示总计汇总页脚并启用总计汇总计算。TotalSummaryPanelMinHeight— 获取或设置总计汇总页脚的最小高度。
定义总计汇总¶
使用 TotalSummaries 集合定义总计汇总。该集合中的项是 SummaryItem 类的实例。每个 SummaryItem 对象指定要汇总的字段、汇总类型、显示结果的列以及其他设置。
xmlns:mxdc="clr-namespace:Eremex.AvaloniaUI.Controls.DataControl;assembly=Eremex.Avalonia.Controls"
<mxtl:TreeListControl x:Name="treeList" ShowTotalSummaries="True" AllowDynamicDataLoading="False">
<mxtl:TreeListControl.TotalSummaries>
<mxdc:SummaryItem FieldName="Name" SummaryType="Count" />
<mxdc:SummaryItem FieldName="Utilization" SummaryType="Average" ShowInColumn="PowerConsumption" />
<mxdc:SummaryItem FieldName="Utilization" SummaryType="Max" />
<mxdc:SummaryItem FieldName="MaintenanceCost" SummaryType="Min" />
<mxdc:SummaryItem FieldName="MaintenanceCost" SummaryType="Max" />
<mxdc:SummaryItem FieldName="PowerConsumption" SummaryType="Sum" />
</mxtl:TreeListControl.TotalSummaries>
</mxtl:TreeListControl>
相关 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的列的标题。
用户汇总自定义¶
默认情况下,用户可以在运行时编辑汇总。在此模式下,汇总单元格会显示 Σ 按钮,用于打开汇总菜单:
用户可以使用此菜单:
-
通过切换汇总函数旁边的复选框来添加或删除汇总。
-
选择
Customize打开Summary Editor对话框。在此对话框的
Summaries选项卡中,用户可以创建跨列汇总(针对一列计算但显示在另一列中的汇总)。在
Order选项卡中,用户可以更改现有汇总的显示顺序。
相关 API
-
AllowEditingTotalSummaries— 获取或设置用户是否可以编辑总计汇总。此属性只影响用户修改汇总的能力,不影响在代码中执行的汇总计算。
自定义汇总¶
自定义汇总允许您使用自己的逻辑计算聚合值。
要添加自定义汇总,请执行以下操作:
-
创建一个
SummaryItem对象,并将其SummaryItem.SummaryType属性设置为Custom。 -
将此
SummaryItem添加到TotalSummaries集合中。 -
处理
CustomSummary事件,为此SummaryItem手动计算值。将
e.SummaryValue事件参数设置为您的自定义结果。在处理
CustomSummary事件时,使用e.Nodes集合遍历目标节点(行)。
示例 - 计算自定义总计汇总¶
以下示例创建一个自定义总计汇总(名为“Needs Attention”),用于计算需要关注的资产数量。这些资产的状态为 Maintenance、Degraded、Offline 或 Decommissioned。
<!-- XAML -->
<mxtl:TreeListControl x:Name="treeList" CustomSummary="OnCustomSummary">
<mxtl:TreeListControl.TotalSummaries>
<mxdc:SummaryItem FieldName="Status" SummaryType="Custom" Label="Needs Attention"/>
<mxdc:SummaryItem FieldName="Name" SummaryType="Count" />
</mxtl:TreeListControl.TotalSummaries>
</mxtl:TreeListControl>
// Code-behind
void OnCustomSummary(object sender, TreeListCustomSummaryEventArgs e)
{
int assetsRequiringAttention = 0;
foreach (var node in e.Nodes)
{
var status = (AssetStatus)treeList.GetCellValue(node, e.SummaryItem.FieldName);
if (status is AssetStatus.Maintenance or AssetStatus.Degraded or AssetStatus.Offline or AssetStatus.Decommissioned)
assetsRequiringAttention++;
}
e.SummaryValue = assetsRequiringAttention;
}
相关 API
CustomSummary— 在计算汇总值时发生。使用SummaryValue事件参数提供自定义汇总值。
获取汇总值¶
您可以使用以下 API 在代码中检索已计算的汇总值:
TreeListControl.GetTotalSummaryValue— 返回总计汇总的计算值。
* 本页面使用机器翻译技术翻译。







