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在初始化阶段。忽略计算阶段和开始结束阶段。

计算自定义统计

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

<dxg:GridControl ItemsSource="{Binding Items}"CustomSummaryCommand="{Binding CustomSummaryCommand}"><dxg:GridControl.Columns><dxg:GridColumn FieldName="Text" GroupIndex="0" /><dxg:GridColumn FieldName="Number" /></dxg:GridControl.Columns><dxg:GridControl.View><dxg:TableView AutoWidth="True"NavigationStyle="Cell"TotalSummaryPosition="Bottom" /></dxg:GridControl.View><dxg:GridControl.TotalSummary><dxg:GridSummaryItem DisplayFormat="Total empty cells count: {0}"FieldName="Number"SummaryType="Custom" /></dxg:GridControl.TotalSummary><dxg:GridControl.GroupSummary><dxg:GridSummaryItem DisplayFormat="Group empty cells count: {0}"FieldName="Number"SummaryType="Custom" /></dxg:GridControl.GroupSummary>
</dxg:GridControl>
using DevExpress.Mvvm;
using DevExpress.Mvvm.DataAnnotations;
using DevExpress.Mvvm.Xpf;
// ...
public class MainViewModel : ViewModelBase {
// ...[Command]public void CustomSummary(RowSummaryArgs args) {if(args.SummaryItem.PropertyName != "Number")return;if(args.SummaryProcess == SummaryProcess.Start) {args.TotalValue = 0;} if(args.SummaryProcess == SummaryProcess.Calculate) {if(IsEmptyCell(args.FieldValue))args.TotalValue = (int)args.TotalValue + 1;}}bool IsEmptyCell(object fieldValue) {return !((int?)fieldValue).HasValue;}
}

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

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

1、创建自定义统计

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

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

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

<dxg:GridControl ...CustomSummary="grid_CustomSummary"><dxg:GridColumn FieldName="ProductName"/><dxg:GridColumn FieldName="UnitPrice"/><dxg:GridColumn FieldName="Quantity"/><dxg:GridControl.TotalSummary><dxg:GridSummaryItem x:Name="avgPrice" FieldName="UnitPrice" SummaryType="Average"/><dxg:GridSummaryItem x:Name="avgQuantity" FieldName="Quantity" SummaryType="Average"/><dxg:GridSummaryItem ShowInColumn="ProductName" SummaryType="Custom" DisplayFormat="{}Average order: {0:c}"/></dxg:GridControl.TotalSummary><dxg:GridControl.View><dxg:TableView ...TotalSummaryPosition="Bottom"></dxg:TableView></dxg:GridControl.View>
</dxg:GridControl>
private void grid_CustomSummary(object sender, DevExpress.Data.CustomSummaryEventArgs e) {if (e.IsTotalSummary) {switch (e.SummaryProcess) {case DevExpress.Data.CustomSummaryProcess.Start:e.TotalValueReady = true;break;case DevExpress.Data.CustomSummaryProcess.Finalize:var averagePrice = (decimal)grid.GetTotalSummaryValue(avgPrice);var averageQuantity = (decimal)grid.GetTotalSummaryValue(avgQuantity);e.TotalValue = averagePrice * averageQuantity;break;}}
}

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

指定是否去计算统计

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

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

<dxg:GridControl x:Name="grid"ItemsSource="{Binding AccountList}"CustomSummaryExistsCommand="{Binding CustomSummaryExistsCommand}"><!-- ... --><dxg:GridControl.GroupSummary><dxg:GridSummaryItem FieldName="Age" SummaryType="Min"/><dxg:GridSummaryItem FieldName="Age" SummaryType="Max"/></dxg:GridControl.GroupSummary>
</dxg:GridControl>
using DevExpress.Mvvm;
using DevExpress.Mvvm.DataAnnotations;
using DevExpress.Mvvm.Xpf;
// ...
public class MainViewModel : ViewModelBase {
// ...[Command]public void CustomSummaryExistsCommand(RowSummaryExistsArgs args) {args.Exists = args.GroupPath[0].GroupLevel == 0;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/144130.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

51单片机+DS1302设计一个电子钟(LCD1602显示时间)

一、前言 电子钟是一种能够准确显示时间的设备&#xff0c;广泛应用于家庭、办公场所和公共场所&#xff0c;为人们提供了方便和准确的时间信息。本项目设计一个基于51单片机的电子钟&#xff0c;使用DS1302作为RTC时钟芯片&#xff0c;LCD1602作为显示屏&#xff0c;并通过串…

torch_cluster、torch_scatter、torch_sparse三个包的安装

涉及到下面几个包安装的时候经常会出现问题&#xff0c;这里我使用先下载然后再安装的办法&#xff1a; pip install torch_cluster pip install torch_scatter pip install torch_sparse 1、选择你对应的torch版本&#xff1a;https://data.pyg.org/whl/ 2、点进去然后&…

国内最受欢迎的电商API接口调用京东商品详情数据

国内实用的API接口 国内最受欢迎的7大API供应平台对比和介绍 本文将介绍7款API供应平台&#xff1a;电商API数据、百度e、Apix、数说聚合、通联数据、HaoService、datasift 。排名不分先后&#xff01; 免费实用的API接口 第一部分 1、电商数据&#xff08;API数据接口_开发者…

网络安全-学习手册

前言 前几天发布了一篇 网络安全&#xff08;黑客&#xff09;自学 没想到收到了许多人的私信想要学习网安黑客技术&#xff01;却不知道从哪里开始学起&#xff01;怎么学 今天给大家分享一下&#xff0c;很多人上来就说想学习黑客&#xff0c;但是连方向都没搞清楚就开始学习…

模版方法模式解密:编写可复用、可维护的代码新境界!

文章目录 一、概念二、生活中应用场景三、角色四、代码实现五、模版方法模式实现JDBC的操作1. 创建约束ORM逻辑的接口RowMapper2.创建封装了所有处理流程的抽象类JdbcTemplate3.创建实体对象Member类4.创建数据库操作类MemberDao5. 客户端测试代码 总结优点缺点 一、概念 属于…

C#检查服务状态,以及进行服务启停

1. linux环境 linux环境通过执行bash命令直接执行&#xff1a; public string RunCmdLinux(string cmd){var proc new Process();System.Console.Write($"Run Linux cmd > [{cmd}] START!");proc.StartInfo.CreateNoWindow true;proc.StartInfo.FileName &…

git clone:SSL: no alternative certificate subject name matches target host name

git clone 时的常见错误&#xff1a; fatal: unable to access ‘https://ip_or_domain/xx/xx.git/’: SSL: no alternative certificate subject name matches target host name ‘ip_or_domain’ 解决办法&#xff1a; disable ssl verify git config --global http.sslVe…

Redis分布式锁(中)

作者简介&#xff1a;大家好&#xff0c;我是smart哥&#xff0c;前中兴通讯、美团架构师&#xff0c;现某互联网公司CTO 联系qq&#xff1a;184480602&#xff0c;加我进群&#xff0c;大家一起学习&#xff0c;一起进步&#xff0c;一起对抗互联网寒冬 我们在不久前介绍了Spr…

JavaEE初阶(18)(JVM简介:发展史,运行流程、类加载:类加载的基本流程,双亲委派模型、垃圾回收相关:死亡对象的判断算法,垃圾回收算法,垃圾收集器)

接上次博客&#xff1a;初阶JavaEE&#xff08;17&#xff09;Linux 基本使用和 web 程序部署-CSDN博客 目录 JVM 简介 JVM 发展史 JVM 运行流程 JVM的内存区域划分 JVM 执行流程 堆 堆的作用 JVM参数设置 堆的组成 垃圾回收 堆内存管理 类加载 类加载的基本流…

Flink(五)【DataStream 转换算子(上)】

前言 这节注定是一个大的章节&#xff0c;我预估一下得两三天&#xff0c;涉及到的一些东西不懂就重新学&#xff0c;比如 Lambda 表达式&#xff0c;我只知道 Scala 中很方便&#xff0c;但在 Java 中有点发怵了&#xff1b;一个接口能不能 new 来构造对象? 答案是可以的&…

Vue模板语法

模板语法有两大类&#xff1a; 1.插值语法 2.指令语法 让我为大家介绍一下吧&#xff01; 一、插值语法 功能:用于解析标签体内容。 写法: {{xxx}}&#xff0c;xxx是js表达式&#xff0c;且可以直接读取到data中的所有属性。 举个例子&#xff1a; <!DOCTYPE html> &l…

idea maven 构建本地jar包及pom文件

1、设置模块build 本地输出路径 <build><defaultGoal>compile</defaultGoal><resources><resource><directory>${basedir}/src/main/resources</directory><includes><include>**/**</include></includes>…

腾讯云服务器可用区是什么意思?

腾讯云服务器可用区是什么意思&#xff1f;云服务器可用区如何选择&#xff1f;可用区是指在同一个地域内电力和网络相互独立的区域&#xff0c;可用区可以做到故障隔离&#xff0c;所以可用区存在的意义在于构建高可用、高容灾应用&#xff0c;将应用部署在不同可用区内&#…

Linux 下安装 Maven 3.8.8【详细步骤】

前提条件:安装 jdk,详见 安装jdk1.8 # 下载(地址可能会因为版本更新无效,到时候直接去官网找下载地址) wget https://dlcdn.apache.org/maven/maven-3/3.8.8/binaries/apache-maven-3.8.8-bin.tar.gz# 解压 tar -zxvf apache-maven-3.8.8-bin.tar.gz# 修改环境变量 vi /e…

ChatkBQA:一个基于大语言模型的知识库问题生成-检索框架11.13

ChatkBQA&#xff1a;一个基于大语言模型的知识库问题生成-检索框架 摘要1 引言3 准备工作4 方法4.1 ChatKBQA概述4.2 在LLMS上进行高效微调4.3 用微调LLMS生成逻辑形式4.4 实体和关系的非监督检索4.5 可解释查询执行 摘要 基于知识的问答&#xff08;KBQA&#xff09;旨在从大…

Windows Server 2012 R2系统服务器远程桌面服务多用户登录配置分享

Windows Server 2012系统在没有安装远程多界面的情况下&#xff0c;最多只能同时运行2个远程桌面&#xff0c;如果是有多个技术员、合伙人同时操作或是像游戏开发需要用到多界面&#xff0c;但是没有安装就很不方便&#xff0c;今天飞飞来和你们分享Windows server 2012R2系统远…

C++ opencv基本用法【学习笔记(九)】

这篇博客为修改过后的转载&#xff0c;因为没有转载链接&#xff0c;所以选了原创 文章目录 一、vs code 结合Cmake debug1.1 配置tasks.json1.2 配置launch.json 二、图片、视频、摄像头读取显示2.1 读取图片并显示2.2 读取视频文件并显示2.3 读取摄像头并写入文件 三、图片基…

通过注释来埋点

目录 开始 插件编写 功能一 功能二 功能三 合并功能 运行代码 总结 这篇文章主要讲如何根据注释&#xff0c;通过babel插件自动地&#xff0c;给相应函数插入埋点代码&#xff0c;在实现埋点逻辑和业务逻辑分离的基础上&#xff0c;配置更加灵活 这篇文章想要达到的效…

非原始值的响应式方案

实际上&#xff0c;实现响应式数据要比想象中难很多&#xff0c;并不是单纯地拦截get/set 操作即可。举例来说&#xff0c;如何拦截 for…in 循环&#xff1f;track 函数如何追踪拦截到的 for…in 循环&#xff1f;类似的问题还有很多。除此之外&#xff0c;我们还应该考虑如何…