提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
翻译|使用教程|编辑:龚雪|2025-10-28 14:53:16.360|阅读 81 次
概述:本文将为大家介绍如何使用DevExpress WinForms数据网格控件实现自定义聚合函数来计算总数和组汇总,欢迎下载最新版组件体验!
#慧都年终盛惠·界面/图表报表/文档/IDE/IOT/测试等千款热门软控件火热促销中>>
DevExpress WinForms拥有180+组件和UI库,能为Windows Forms平台创建具有影响力的业务解决方案。DevExpress WinForms能完美构建流畅、美观且易于使用的应用程序,无论是Office风格的界面,还是分析处理大批量的业务数据,它都能轻松胜任!
DevExpress GridControl允许您实现自定义聚合函数来计算总数和组汇总,在本教程中您将创建一个使用来自两个不同字段的值计算的汇总,还将实现一个自定义组汇总来计算将某个字段值设置为true的记录数。
获取DevExpress WinForms v25.1正式版下载
DevExpress技术交流群11:749942875 欢迎一起进群讨论
从没有任何汇总的GridControl开始。
首先启用View页脚,展开GridView.OptionsView属性并打开GridOptionsView.ShowFooter选项。
之后选择Unit Price列,展开其GridColumn.SummaryItem属性,并将GridSummaryItem.SummaryType设置为SummaryItemType.Custom,使用GridSummaryItem.DisplayFormat属性自定义文本格式。另外,将GridSummaryItem.Tag属性设置为1,此值将用于在代码中标识此摘要项。
现在创建一个新的分组摘要,调用网格设计器,切换到分组摘要项页面并添加新项。指定文本格式,将GridSummaryItem.FieldName属性设置为Discontinued,将GridSummaryItem.SummaryType属性设置为SummaryItemType.Custom,将GridSummaryItem.Tag属性设置为2。
跳转到代码视图并声明两个将存储汇总值的变量。
C#
// Variables that store summary values. int discontinuedProductsCount; double totalPrice;
要实现汇总计算算法,处理View的GridView.CustomSummaryCalculate事件,在事件处理程序中,使用GridSummaryItem.Tag属性来标识汇总项。
C#
private void gridView_CustomSummaryCalculate(object sender, CustomSummaryEventArgs e) {
GridView view = sender as GridView;
// Get the summary ID.
int summaryID = Convert.ToInt32((e.Item as GridSummaryItem).Tag);
}
为了允许您初始化汇总开始值,GridView.CustomSummaryCalculate事件首先被触发,同时CustomSummaryEventArgs.SummaryProcess参数被设置为CustomSummaryProcess.Start。在此阶段,您可以重置已停产产品的计数器和将计算所有库存产品总价的变量。
C#
private void gridView_CustomSummaryCalculate(object sender, CustomSummaryEventArgs e) {
// ...
// Custom summary initialization.
if (e.SummaryProcess == CustomSummaryProcess.Start) {
switch(summaryID) {
case 1:
totalPrice = 0;
break;
case 2:
discontinuedProductsCount = 0;
break;
}
}
}
然后在CustomSummaryEventArgs.SummaryProcess参数设置为GridView.CustomSummaryCalculate的情况下,CustomSummaryProcess.Calculate事件会为视图中的每一行数据或组中的每一行数据触发,这是您可以累积汇总值的地方。当前处理的行和字段值由事件的CustomSummaryEventArgs.RowHandle 和 CustomSummaryEventArgs.FieldValue参数指定。
对于总摘要,您需要将产品的单价乘以库存单位,并将结果添加到之前的总价中。对于分组总结,如果产品已停产,则增加计数器。
C#
private void gridView_CustomSummaryCalculate(object sender, CustomSummaryEventArgs e) {
// ...
// Custom summary calculation.
if (e.SummaryProcess == CustomSummaryProcess.Calculate) {
switch (summaryID) {
case 1: // The total summary calculated against the 'UnitPrice' column.
int unitsInStock = Convert.ToInt32(view.GetRowCellValue(e.RowHandle, "UnitsInStock"));
totalPrice += Convert.ToDouble(e.FieldValue) * unitsInStock;
break;
case 2: // The group summary.
Boolean isDiscontinued = Convert.ToBoolean(e.FieldValue);
if (isDiscontinued) discontinuedProductsCount++;
break;
}
}
}
在处理完所有行之后,GridView.CustomSummaryCalculate事件被再次引发,并且CustomSummaryEventArgs.SummaryProcess参数被设置为CustomSummaryProcess.Finalize。在此阶段,完成汇总计算并将汇总值分配给事件的CustomSummaryEventArgs.TotalValue参数。
C#
private void gridView_CustomSummaryCalculate(object sender, CustomSummaryEventArgs e) {
// ...
// Finalization.
if (e.SummaryProcess == CustomSummaryProcess.Finalize) {
switch (summaryID) {
case 1:
e.TotalValue = totalPrice;
break;
case 2:
e.TotalValue = discontinuedProductsCount;
break;
}
}
}
运行应用程序来查看结果,View在Unit Price列下的页脚单元格显示一次针对两个字段计算的摘要。按类别列对网格的数据进行分组,组行显示每个组中已停产产品的数量。
// Variables that store summary values.
int discontinuedProductsCount;
double totalPrice;
private void gridView_CustomSummaryCalculate(object sender, CustomSummaryEventArgs e) {
GridView view = sender as GridView;
// Get the summary ID.
int summaryID = Convert.ToInt32((e.Item as GridSummaryItem).Tag);
// Initialization.
if (e.SummaryProcess == CustomSummaryProcess.Start) {
discontinuedProductsCount = 0;
totalPrice = 0;
}
// Calculation.
if (e.SummaryProcess == CustomSummaryProcess.Calculate) {
switch (summaryID) {
case 1: // The total summary calculated against the 'UnitPrice' column.
int unitsInStock = Convert.ToInt32(view.GetRowCellValue(e.RowHandle, "UnitsInStock"));
totalPrice += Convert.ToDouble(e.FieldValue) * unitsInStock;
break;
case 2: // The group summary.
Boolean isDiscontinued = Convert.ToBoolean(e.FieldValue);
if (isDiscontinued) discontinuedProductsCount++;
break;
}
}
// Finalization.
if (e.SummaryProcess == CustomSummaryProcess.Finalize) {
switch (summaryID) {
case 1:
e.TotalValue = totalPrice;
break;
case 2:
e.TotalValue = discontinuedProductsCount;
break;
}
}
}
更多DevExpress线上公开课、中文教程资讯请上中文网获取
慧都是⼀家⾏业数字化解决⽅案公司,专注于软件、⽯油与⼯业领域,以深⼊的业务理解和⾏业经验,帮助企业实现智能化转型与持续竞争优势。
慧都科技是DevExpress的中国区的合作伙伴,DevExpress作为用户界面领域的优秀产品,帮助企业高效构建权限管理、数据可视化(如网格/图表/仪表盘)、跨平台系统(WinForms/ASP.NET/.NET MAUI)及行业定制解决方案,加速开发并强化交互体验。
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@evget.com
文章转载自:慧都网



在软件研发质量管控领域,Parasoft 是深耕多年的专业解决方案提供商,旗下拥有覆盖代码静态分析、单元测试、API 测试、质量数据管理等全流程的工具矩阵,能够为航空航天、汽车电子、医疗设备等多行业提供端到端的软件测试解决方案,帮助企业在加速研发迭代的同时,守住产品质量与合规底线。
C++广泛应用于汽车电子、工业控制等高要求领域,代码迭代频繁,测试保障至关重要。然而传统全量扫描效率低下,耗时久、资源消耗大,成为研发流程瓶颈。如何实现高效精准测试?自动化测试平台Parasoft C/C++ Test 提供增量扫描解决方案,仅针对代码变更部分进行检测,显著提升测试效率,兼顾准确性与轻量化。
在本指南中,您将学习如何使用 Vaadin Copilot 的 Figma Importer API 将 Figma 中的组件复制并粘贴到 Vaadin 中作为 Java 或 React 代码。
可视化比例数据(例如市场份额、费用分布或调查结果)时,通常最好使用环形图。本文将介绍如何使用 C# 和Aspose.Cells for .NET在 Excel 中创建环形图。本指南提供了两个完整的、可直接运行的代码示例:一个基本的单系列环形图和一个带有自定义颜色和图例设置的多系列环形图,方便您立即将强大的可视化功能集成到任何 .NET 应用程序中。
相关产品
为Windows Forms平台创建具有影响力的业务解决方案,高性价比WinForms界面控件套包。
DevExpress DXperience Subscription高性价比的企业级.NET用户界面套包,助力企业创建卓越应用!
DevExpress Universal Subscription优秀的界面控件开发包,帮助企业构建卓越应用!
最新文章 MORE
相关文章 MORE
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@evget.com
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢
慧都科技 版权所有 Copyright 2003-
2025 渝ICP备12000582号-13 
渝公网安备
50010702500608号
首页 