自定义汇总
XtraTreeList 提供了允许实现自定义聚合函数的 TreeList.GetCustomSummaryValue 事件。 例如,可能需要计算在某个层级下有指定列值的节点的数目。 另一个实例是计算最大值的折扣。 在这些情况下,应该编写 GetCustomSummaryValue 事件处理程序。
如果需要以自定义方式计算脚注汇总或分组汇总,则把 TreeListColumn.SummaryFooter 或 TreeListColumn.RowFooterSummary 属性设置为 SummaryItemType.Custom。 否则 TreeList.GetCustomSummaryValue 事件不会发生。
这些事件的参数提供了下列可以用于计算结果汇总值的属性。
- GetCustomSummaryValueEventArgs.Nodes
- GetCustomSummaryValueEventArgs.Column
- GetCustomSummaryValueEventArgs.IsSummaryFooter
- GetCustomSummaryValueEventArgs.CustomValue
包含了在计算中所涉及到的节点的集合。
获取取值被用于计算汇总值的列。
如果计算脚注汇总值,则返回 true; 如果计算分组汇总值,则返回 false。
包含汇总结果。 把计算值保存到此属性。
示例
下面的示例计算“Budget”列的取值超出 500,000 的记录的数目。 setCustomSummary 方法设置 Budget 列的自定义汇总类型。 TreeList.GetCustomSummaryValue 事件处理程序实现计算逻辑。
下面的插图展示了运行结果。
C# | 复制代码 |
---|---|
private void setCustomSummary() { treeList1.OptionsView.ShowRowFooterSummary = true; treeList1.Columns["Budget"].RowFooterSummary = SummaryItemType.Custom; treeList1.Columns["Budget"].RowFooterSummaryStrFormat = "{0} nodes exceed limit"; } private void treeList1_GetCustomSummaryValue(object sender, DevExpress.XtraTreeList.GetCustomSummaryValueEventArgs e) { if(e.Column.FieldName == "Budget") { IEnumerator en = e.Nodes.GetEnumerator(); int exceedingLimitNodes = 0; while(en.MoveNext()) { TreeListNode node = (TreeListNode)en.Current; decimal budget = (decimal)node.GetValue(e.Column); if(budget > 500000) { exceedingLimitNodes ++; //... } } e.CustomValue = exceedingLimitNodes; } } |
Visual Basic | 复制代码 |
---|---|
Private Sub setCustomSummary() TreeList1.OptionsView.ShowRowFooterSummary = True TreeList1.Columns("Budget").RowFooterSummary = SummaryItemType.Custom TreeList1.Columns("Budget").RowFooterSummaryStrFormat = "{0} nodes exceed limit" End Sub Private Sub TreeList1_GetCustomSummaryValue(ByVal sender As Object, ByVal e As DevExpress.XtraTreeList.GetCustomSummaryValueEventArgs) _ Handles TreeList1.GetCustomSummaryValue If (e.Column.FieldName = "Budget") Then Dim en As IEnumerator = e.Nodes.GetEnumerator() Dim exceedingLimitNodes As Integer = 0 Dim node As TreeListNode While en.MoveNext() = True node = CType(en.Current, TreeListNode) Dim budget As Decimal = CType(node.GetValue(e.Column), Decimal) If (budget > 500000) Then exceedingLimitNodes += 1 '... End If End While e.CustomValue = exceedingLimitNodes End If End Sub |