• wpf devexpress 自定义统计


    总计统计和分组统计包含预定义总计函数。这些函数允许你计算如下:

    数据列的数量(Count)

    最大和最小值(Max和Min)

    总计和平均值(Sum和Average)

    处理GridControl.CustomSummary 事件或者使用 GridControl.CustomSummaryCommand 属性去应用自定义规则计算统计。自定义统计允许如下操作:

    计算统计对于记录和遇到的特殊类型

    调用多重数据字段在计算中

    实现复杂统计函数(对于,这个流行偏离标准和等等)

    如果GridControl.View 属性设置TreeListView,使用TreeListView.CustomSummary 事件或者TreeListView.CustomSummaryCommand属性

    常规信息

    手动计算统计:

    1、创建统计内容和设置SummaryItemBase.SummaryType 属性到SummaryItemType.Custom

    2、创建命令使用自定义算法去计算值

    3、绑定命令到GridControl.CustomSummaryCommand 属性

    GridControl 计算如下:

    初始化

    这个GridControl执行CustomSummary命令设置SummaryArgs.SummaryProcess 属性去 Start。在这个阶段,你可以初始化统计值(例如,重置内部计数器)。

    计算

    GridControl 执行CustomSummary 命令多次,在视图和分组对于每一个数据列。SummaryArgs.SummaryProcess 属性设置计算。在这个阶段,可以计算统计。

    结束

    GridControl执行CustomSummary命令设置SummaryArgs.SummaryProcess 属性去结束。在这个阶段,你可以分配计算统计在 SummaryArgs.TotalValue 属性。

    忽略Calculation 阶段和计算一个自定义统计在初始化和结束阶段,设置SummaryArgs.TotalValueReady 属性去true在初始化阶段。忽略计算阶段和开始结束阶段。

    计算自定义统计

    如下代码例子计算总计空单元格数字在特定行:

    1. <dxg:GridControl ItemsSource="{Binding Items}"
    2. CustomSummaryCommand="{Binding CustomSummaryCommand}">
    3. <dxg:GridControl.Columns>
    4. <dxg:GridColumn FieldName="Text" GroupIndex="0" />
    5. <dxg:GridColumn FieldName="Number" />
    6. dxg:GridControl.Columns>
    7. <dxg:GridControl.View>
    8. <dxg:TableView AutoWidth="True"
    9. NavigationStyle="Cell"
    10. TotalSummaryPosition="Bottom" />
    11. dxg:GridControl.View>
    12. <dxg:GridControl.TotalSummary>
    13. <dxg:GridSummaryItem DisplayFormat="Total empty cells count: {0}"
    14. FieldName="Number"
    15. SummaryType="Custom" />
    16. dxg:GridControl.TotalSummary>
    17. <dxg:GridControl.GroupSummary>
    18. <dxg:GridSummaryItem DisplayFormat="Group empty cells count: {0}"
    19. FieldName="Number"
    20. SummaryType="Custom" />
    21. dxg:GridControl.GroupSummary>
    22. dxg:GridControl>
    1. using DevExpress.Mvvm;
    2. using DevExpress.Mvvm.DataAnnotations;
    3. using DevExpress.Mvvm.Xpf;
    4. // ...
    5. public class MainViewModel : ViewModelBase {
    6. // ...
    7. [Command]
    8. public void CustomSummary(RowSummaryArgs args) {
    9. if(args.SummaryItem.PropertyName != "Number")
    10. return;
    11. if(args.SummaryProcess == SummaryProcess.Start) {
    12. args.TotalValue = 0;
    13. }
    14. if(args.SummaryProcess == SummaryProcess.Calculate) {
    15. if(IsEmptyCell(args.FieldValue))
    16. args.TotalValue = (int)args.TotalValue + 1;
    17. }
    18. }
    19. bool IsEmptyCell(object fieldValue) {
    20. return !((int?)fieldValue).HasValue;
    21. }
    22. }

    计算自定义统计基于预定义统计

    GridControl计算自定义统计在之后预定义统计(Count,Sum,Min,和等等)。作为结果,你可以使用预定义统计值去计算自定义统计。

    1、创建自定义统计

    2、处理GridControl.CustomSummary / TreeListView.CustomSummary 事件

    3、在初始化阶段,设置 e.TotalValueReady 属性为true去忽略计算阶段

    4、使用DataControlBase.GetTotalSummaryValue方法去获得预定义统计在结束阶段。

    1. <dxg:GridControl ...
    2. CustomSummary="grid_CustomSummary">
    3. <dxg:GridColumn FieldName="ProductName"/>
    4. <dxg:GridColumn FieldName="UnitPrice"/>
    5. <dxg:GridColumn FieldName="Quantity"/>
    6. <dxg:GridControl.TotalSummary>
    7. <dxg:GridSummaryItem x:Name="avgPrice" FieldName="UnitPrice" SummaryType="Average"/>
    8. <dxg:GridSummaryItem x:Name="avgQuantity" FieldName="Quantity" SummaryType="Average"/>
    9. <dxg:GridSummaryItem ShowInColumn="ProductName" SummaryType="Custom"
    10. DisplayFormat="{}Average order: {0:c}"/>
    11. dxg:GridControl.TotalSummary>
    12. <dxg:GridControl.View>
    13. <dxg:TableView ...
    14. TotalSummaryPosition="Bottom">
    15. dxg:TableView>
    16. dxg:GridControl.View>
    17. dxg:GridControl>
    1. private void grid_CustomSummary(object sender, DevExpress.Data.CustomSummaryEventArgs e) {
    2. if (e.IsTotalSummary) {
    3. switch (e.SummaryProcess) {
    4. case DevExpress.Data.CustomSummaryProcess.Start:
    5. e.TotalValueReady = true;
    6. break;
    7. case DevExpress.Data.CustomSummaryProcess.Finalize:
    8. var averagePrice = (decimal)grid.GetTotalSummaryValue(avgPrice);
    9. var averageQuantity = (decimal)grid.GetTotalSummaryValue(avgQuantity);
    10. e.TotalValue = averagePrice * averageQuantity;
    11. break;
    12. }
    13. }
    14. }

    可以使用e.GetGroupSummary 方法去获得预定义分组统计值。

    指定是否去计算统计

    CustomSummaryExists 事件或CustomSummaryExistsCommand 属性允许指定和统计应用计算和显示

    如下计算分组统计只有对于顶级分组等级:

    1. <dxg:GridControl x:Name="grid"
    2. ItemsSource="{Binding AccountList}"
    3. CustomSummaryExistsCommand="{Binding CustomSummaryExistsCommand}">
    4. <dxg:GridControl.GroupSummary>
    5. <dxg:GridSummaryItem FieldName="Age" SummaryType="Min"/>
    6. <dxg:GridSummaryItem FieldName="Age" SummaryType="Max"/>
    7. dxg:GridControl.GroupSummary>
    8. dxg:GridControl>
    1. using DevExpress.Mvvm;
    2. using DevExpress.Mvvm.DataAnnotations;
    3. using DevExpress.Mvvm.Xpf;
    4. // ...
    5. public class MainViewModel : ViewModelBase {
    6. // ...
    7. [Command]
    8. public void CustomSummaryExistsCommand(RowSummaryExistsArgs args) {
    9. args.Exists = args.GroupPath[0].GroupLevel == 0;
    10. }
    11. }

  • 相关阅读:
    第十五届蓝桥杯模拟赛(第一期)
    ElasticSearch 之 数据类型
    一文了解常用的微波传输线(一)
    计时器Timing Wheel 时间轮算法
    JS 原型的原理
    深度剖析集成学习Xgboost(续)
    手动搭建K8S环境
    2023-10-22
    力扣:90. 子集 II(Python3)
    MySQL4(多表查询)
  • 原文地址:https://blog.csdn.net/loongsking/article/details/134438431