2025活动

DevExpress控件使用交流,DevExpress中国社区Dev联系电话 联系电话:023-68661681

DevExpress WinForms中文教程:Data Grid - 如何自定义汇总函数?

来源:   发布时间:2025-10-28   浏览:66次

DevExpress WinForms拥有180+组件和UI库,能为Windows Forms平台创建具有影响力的业务解决方案。DevExpress WinForms能完美构建流畅、美观且易于使用的应用程序,无论是Office风格的界面,还是分析处理大批量的业务数据,它都能轻松胜任!

DevExpress WinForms中文使用教程图集

DevExpress GridControl允许您实现自定义聚合函数来计算总数和组汇总,在本教程中您将创建一个使用来自两个不同字段的值计算的汇总,还将实现一个自定义组汇总来计算将某个字段值设置为true的记录数。

获取DevExpress WinForms v25.1正式版下载

DevExpress技术交流群11:749942875      欢迎一起进群讨论

开始

从没有任何汇总的GridControl开始。

DevExpress WinForms中文使用教程图集
添加总摘要

首先启用View页脚,展开GridView.OptionsView属性并打开GridOptionsView.ShowFooter选项。

之后选择Unit Price列,展开其GridColumn.SummaryItem属性,并将GridSummaryItem.SummaryType设置为SummaryItemType.Custom,使用GridSummaryItem.DisplayFormat属性自定义文本格式。另外,将GridSummaryItem.Tag属性设置为1,此值将用于在代码中标识此摘要项。

DevExpress WinForms中文使用教程图集
添加分组摘要

现在创建一个新的分组摘要,调用网格设计器,切换到分组摘要项页面并添加新项。指定文本格式,将GridSummaryItem.FieldName属性设置为Discontinued,将GridSummaryItem.SummaryType属性设置为SummaryItemType.Custom,将GridSummaryItem.Tag属性设置为2。

DevExpress WinForms中文使用教程图集
实现自定义汇总计算算法

跳转到代码视图并声明两个将存储汇总值的变量。

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.RowHandleCustomSummaryEventArgs.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列下的页脚单元格显示一次针对两个字段计算的摘要。按类别列对网格的数据进行分组,组行显示每个组中已停产产品的数量。

DevExpress WinForms中文使用教程图集
完整代码
// 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)及行业定制解决方案,加速开发并强化交互体验。

慧都22周年庆火热开启·狂欢‘价’到!
本站文章除注明转载外,均为本站原创或翻译
欢迎任何形式的转载,但请务必注明出处,尊重他人劳动成果
转载请注明:文章转载自:DevExpress控件中文网 [https://www.devexpresscn.com/]
本文地址:https://www.devexpresscn.com/post/5534.html

相关产品: DevExpress WinForms Subscription, DevExpress Universal Subscription,

扫码咨询
电话咨询
023-68661681
返回
顶部