- [C#] Hướng dẫn sử dụng temp mail service api trên winform
- [C#] Hướng dẫn tạo mã thanh toán VietQR Pay không sử dụng API trên winform
- [C#] Hướng Dẫn Tạo Windows Service Đơn Giản Bằng Topshelf
- [C#] Chia sẻ source code đọc dữ liệu từ Google Sheet trên winform
- [C#] Chia sẻ source code tạo mã QR MOMO đa năng Winform
- [C#] Chia sẻ source code phần mềm lên lịch tự động chạy ứng dụng Scheduler Task Winform
- [Phần mềm] Tải và cài đặt phần mềm Sublime Text 4180 full version
- [C#] Hướng dẫn download file từ Minio Server Winform
- [C#] Hướng dẫn đăng nhập zalo login sử dụng API v4 trên winform
- [SOFTWARE] Phần mềm gởi tin nhắn Zalo Marketing Pro giá rẻ mềm nhất thị trường
- [C#] Việt hóa Text Button trên MessageBox Dialog Winform
- [DEVEXPRESS] Chia sẻ code các tạo report in nhiều hóa đơn trên XtraReport C#
- [POWER AUTOMATE] Hướng dẫn gởi tin nhắn zalo từ file Excel - No code
- [C#] Chia sẻ code lock và unlock user trong domain Window
- [DEVEXPRESS] Vẽ Biểu Đồ Stock Chứng Khoán - Công Cụ Thiết Yếu Cho Nhà Đầu Tư trên Winform
- [C#] Hướng dẫn bảo mật ứng dụng 2FA (Multi-factor Authentication) trên Winform
- [C#] Hướng dẫn convert HTML code sang PDF File trên NetCore 7 Winform
- [C#] Hướng dẫn viết ứng dụng chat với Gemini AI Google Winform
- Hướng dẫn khóa file bằng nhiều process id, không cho xóa tập tin
- Hướng dẫn cách tạo Product Id cho ứng dụng phần mềm XXXXX-XXXXX-XXXXX-XXXXX
[DEVEXPRESS] Hướng dẫn Custom Summary in Footer trong Gridview C#
Xin chào các bạn trẻ, bài viết hôm nay mình sẻ tiếp tục hướng dẫn các bạn cách Custom Summary trên Footer Gridview Devexpress C#, Winform.
[DEVEXPRESS] How to custom Summary Fotter Gridview C#
Giao diện demo ứng dụng Gridview Summary C#:
Bình thường, trên summary của Gridview có hỗ trợ cho chúng ta các hàm cơ bản như: Sum, min, max, average...
Và cái cuối cùng là custom, để chúng ta có thể sử dụng phương thức tính toán theo ý của mình.
Ở hình ảnh demo ở trên, mình sẽ tính trung bình tuổi và chỉ tính trung bình tuổi của những nhân viên Employee
nào có giới tính là Nam
Full source code C#:
using DevExpress.Data;
using DevExpress.XtraEditors.Repository;
using DevExpress.XtraGrid;
using DevExpress.XtraGrid.Columns;
using DevExpress.XtraGrid.Views.Grid;
using EmployeeDataExample;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace CustomSummaryGridview
{
public partial class Form1 : DevExpress.XtraEditors.XtraForm
{
public Form1()
{
InitializeComponent();
}
private async void Form1_Load(object sender, EventArgs e)
{
var employeeData = new EmployeeData();
var dataEmployees = await employeeData.GetEmployeesAsync();
gridControl1.DataSource = dataEmployees;
double averageAgeEmployee = 0;
int countEmployee = 0;
gridView1.CustomSummaryCalculate += (ss, ee) =>
{
GridView view = ss as GridView;
if (ee.IsTotalSummary && (ee.Item as GridSummaryItem).FieldName == "Age")
{
GridSummaryItem item = ee.Item as GridSummaryItem;
if (item.FieldName == "Age")
{
switch (ee.SummaryProcess)
{
case CustomSummaryProcess.Start:
averageAgeEmployee = 0;
countEmployee = 0;
break;
case CustomSummaryProcess.Calculate:
var gender = view.GetRowCellValue(ee.RowHandle, "Gender").ToString();
if (gender == "Nam")
{
++countEmployee;
averageAgeEmployee += Convert.ToDouble(ee.FieldValue);
}
break;
case CustomSummaryProcess.Finalize:
if (countEmployee == 0)
{
ee.TotalValue = 0;
}
else {
ee.TotalValue = (averageAgeEmployee / countEmployee);
}
break;
}
}
}
};
gridView1.OptionsView.ShowFooter = true;
GridColumn column = gridView1.Columns.Where(x => x.FieldName == "Age").FirstOrDefault();
column.SummaryItem.SummaryType = SummaryItemType.Custom;
column.SummaryItem.DisplayFormat = "Tuổi Trung Bình: {0:#,###.##}";
//RepositoryItemCheckEdit edit = gridView1.Columns["Mark"].RealColumnEdit as RepositoryItemCheckEdit;
//edit.EditValueChanged += (sender, e) => {
// //Post an editor's value to a data source
// gridView1.PostEditor();
// //Force calculation of the total summary
// gridView1.UpdateTotalSummary();
//};
gridView1.ColumnFilterChanged += GridView1_ColumnFilterChanged;
}
private void GridView1_ColumnFilterChanged(object sender, EventArgs e)
{
gridView1.UpdateTotalSummary();
}
}
}
Thanks for watching!