翻譯|使用教程|編輯:龔雪|2025-10-28 14:53:16.360|閱讀 47 次
概述:本文將為大家介紹如何使用DevExpress WinForms數據網格控件實現自定義聚合函數來計算總數和組匯總,歡迎下載最新版組件體驗!
#慧都22周年慶大促·界面/圖表報表/文檔/IDE/IOT/測試等千款熱門軟控件火熱促銷中>>
DevExpress WinForms擁有180+組件和UI庫,能為Windows Forms平臺創建具有影響力的業務解決方案。DevExpress WinForms能完美構建流暢、美觀且易于使用的應用程序,無論是Office風格的界面,還是分析處理大批量的業務數據,它都能輕松勝任!
DevExpress GridControl允許您實現自定義聚合函數來計算總數和組匯總,在本教程中您將創建一個使用來自兩個不同字段的值計算的匯總,還將實現一個自定義組匯總來計算將某個字段值設置為true的記錄數。
獲取DevExpress WinForms v25.1正式版下載
DevExpress技術交流群11:749942875 歡迎一起進群討論
從沒有任何匯總的GridControl開始。
首先啟用View頁腳,展開屬性并打開選項。
之后選擇Unit Price列,展開其屬性,并將設置為,使用屬性自定義文本格式。另外,將屬性設置為1,此值將用于在代碼中標識此摘要項。
現在創建一個新的分組摘要,調用網格設計器,切換到分組摘要項頁面并添加新項。指定文本格式,將屬性設置為Discontinued,將屬性設置為,將屬性設置為2。
跳轉到代碼視圖并聲明兩個將存儲匯總值的變量。
C#
// Variables that store summary values. int discontinuedProductsCount; double totalPrice;
要實現匯總計算算法,處理View的事件,在事件處理程序中,使用屬性來標識匯總項。
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);
}
為了允許您初始化匯總開始值,事件首先被觸發,同時參數被設置為。在此階段,您可以重置已停產產品的計數器和將計算所有庫存產品總價的變量。
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;
}
}
}
然后在參數設置為的情況下,事件會為視圖中的每一行數據或組中的每一行數據觸發,這是您可以累積匯總值的地方。當前處理的行和字段值由事件的 和 參數指定。
對于總摘要,您需要將產品的單價乘以庫存單位,并將結果添加到之前的總價中。對于分組總結,如果產品已停產,則增加計數器。
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;
}
}
}
在處理完所有行之后,事件被再次引發,并且參數被設置為。在此階段,完成匯總計算并將匯總值分配給事件的參數。
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作為用戶界面領域的優秀產品,幫助企業高效構建權限管理、數據可視化(如網格/圖表/儀表盤)、跨平臺系統(WinForms/ASP.NET/.NET MAUI)及行業定制解決方案,加速開發并強化交互體驗。
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@ke049m.cn
文章轉載自:慧都網