- [SQLSERVER] Loại bỏ Restricted User trên database MSSQL
- [C#] Hướng dẫn tạo mã QRcode Style trên winform
- [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
[Devexpress] Summary Specific Cells selected gridControl - Tính sum những ô được chọn trên lưới
Hé lô mọi người ! Vì có một số bạn đã yêu cầu, nên hôm nay mình xin demo một project nhỏ thể hiện tính tổng các giá trị của các ô được chọn trên GridControl của DevExpress.
Phiên bản DevExpress của mình hiện tại là DevExpress.v19.2.5.
1. Đầu tiên mình thêm một gridControl từ Toolbox ra form. Để có được ô Summary trên lưới, mình cần thiết lập một số thuộc tính sau:
gridView1.OptionsSelection.MultiSelect = true;
gridView1.OptionsSelection.MultiSelectMode = GridMultiSelectMode.CellSelect;
=> Nhằm cho phép gridView chọn nhiều ô trên lưới.
gridView1.OptionsView.ShowFooter = true;
=> Thiết lập này sẽ hiển thị phần footer của gridControl, ô Summary của gridView cũng sẽ hiển thị tại đây.
2. Tạo một DataTable generate một dữ liệu mẫu cho gridControl:
private static DataTable CreateTable(int RowCount)
{
Random r = new Random();
DataTable tbl = new DataTable();
tbl.Columns.Add("Name", typeof(string));
tbl.Columns.Add("ID", typeof(int));
tbl.Columns.Add("Value", typeof(int));
tbl.Columns.Add("State", typeof(bool));
tbl.Columns.Add("Date", typeof(DateTime));
for (int i = 0; i < RowCount; i++)
tbl.Rows.Add(new object[] { String.Format("Name{0}", i), i, r.Next(1, 99), i % 2, DateTime.Now.AddDays(i) });
return tbl;
}
Summary specific Cells selected gridControl
Tiếp theo, chúng ta viết trong event gridView1_SelectionChanged:
int totalSummary = 0;
private void gridView1_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
totalSummary = 0;
GridView view = sender as GridView;
if (view.FocusedColumn.FieldName == "Value")
{
GridCell[] seledtedCell = view.GetSelectedCells();
if (seledtedCell.Length > 0)
{
foreach (GridCell cel in seledtedCell)
{
totalSummary += (int)view.GetRowCellValue(cel.RowHandle, "Value");
}
}
}
else
{
for (int i = 0; i < view.RowCount; i++)
{
totalSummary += (int)view.GetRowCellValue(i, "Value");
}
}
gridView1.InvalidateFooter();
}
Trong hàm này, chúng ta xử lý những ô mà người dùng chọn. Lấy giá trị tổng và gán vào biến global.
Sau đó chúng ta viết hàm cho event gridView1_CustomDrawFooterCell:
if (e.Column.FieldName == "Value")
{
e.Info.DisplayText = totalSummary.ToString();
e.Column.SummaryItem.DisplayFormat = "Tổng: {0:N2}";
//BeginInvoke(new MethodInvoker(delegate { gridView1.UpdateTotalSummary(); }));
}
Do DevExpress không cho phép update giá trị ô Summary trực tiếp nên chúng ta phải update thông qua event này.
Notes:
- gridView1.InvalidateFooter();
- BeginInvoke(new MethodInvoker(delegate { gridView1.UpdateTotalSummary(); }));
2 dòng này có cùng một mục đích là tính toán và thiết lập lại giá trị của ô Summary trong gridControl. Chúng ta có thể sử dụng câu lệnh nào tùy ý, về hiệu năng thì mình không rõ, nhưng cá nhân mình nhận định nó cũng không ảnh hưởng gì nhiều đâu, nên thích xài cái nào cũng được. :D
Cuối cùng chúng ta gọi gán giá dataTable cho gridControl, như thế là xong.
public Form1()
{
InitializeComponent();
gridControl1.DataSource = CreateTable(10);
GridView view = gridView1;
for (int i = 0; i < view.RowCount; i++)
{
totalSummary += (int)view.GetRowCellValue(i, "Value");
}
//Chỗ này mình muốn tính totalSummary ngay từ đầu để k select thì vẫn có giá trị
}