- [C#] Ẩn ứng dụng winform từ Apps vào Background Process trên Task Manager
- [SQLSERVER] Xử lý ngoại lệ sử dụng TRY...CATCH và RAISEERROR
- [C#] Bắt sự kiện bàn phím chuột bên ngoài ứng dụng winform sử dụng thư viện MouseKeyHook
- [DEVEXPRESS] Đặt mật khẩu và bỏ mật khẩu tập tin file PDF
- [C#] Thêm ứng dụng vào Taskbar sử dụng SharpShell DeskBand
- [C#] Hướng dẫn thêm text vào hình ảnh icon winform
- [C#] Chia sẽ tổng hợp source code đồ án về Csharp
- [C#] Hướng dẫn viết ứng dụng quay màn hình video winform, Screen Recorder
- [C#] Hướng dẫn sử dụng thư viện Input Simulator để làm việc với Keyboard, Mouse Virtual
- [DEVEXPRESS] Hướng dẫn tích Filter Contain khi click chuột phải vào cell selection trên Gridview
- [C#] Tra cứu mã số thuế cá nhân bằng CMND hoặc CCCD
- [C#] Convert hình ảnh image thành Blurhash sử dụng trong loading image winform
- [POWERSHELL] Script sao lưu backup và nén database sqlserver
- [C#] Giới thiệu thư viện Autofac Dependency Injection
- [C#] Hướng dẫn tạo Windows Services đơn giản Winform
- [C#] Một click chuột điều khiển máy tính từ xa sử dụng Ultraviewer
- Hướng dẫn đóng gói phần mềm sử dụng Powershell biên dịch script thành file exe
- [C#] Hướng dẫn sử dụng Task Dialog trên NET 5
- [C#] Hướng dẫn xem lịch sử các trang web đã truy cập trên Chrome Browser
- [C#] Hướng dẫn lấy thông tin Your ID và Password của Ultraviewer Winform
Thay đổi màu nền của ô trong GridControl Devexpress bằng C#
Hôm nay mình xin giới thiệu đến các bạn cách để thay đổi màu nền của ô (Cell Backcolor Appearance) theo giá trị của một ô khác trên cùng lưới của bộ công cụ DevExpress sử dụng ngôn ngữ C#.
Ví dụ: trong danh mục nhân viên, khi mình chọn lọc ra những bạn nam. Hệ thống sẽ kiểm tra cột giới tính của lưới và tô màu những ô trong cột tên những người có giới tính là Nam. Với Grid Designer - Appearance, DevExpress cũng cho phép người dùng thiết kế sẵn các Rules được gán cố định cho các cột, khi load dữ liệu vào grid thì các rules này sẽ quy định màu sắc, icon, định dạng, v.v...
Dựa vào điều kiện mà người dùng thiết lập. Tuy nhiên những thiết lập này sẽ không thể được tùy biến sau khi build ứng dụng. Do đó hôm nay mình sẽ làm một ví dụ về thực hiện thay đổi màu sắc của các ô trên lưới khi mình thay đổi giá trị của combobox. Thiết kế form như hình: Bao gồm combobox dùng để tùy biến giá trị so sánh, và một GridControl.
Combobox mình vừa thêm vào thực chất là một LookupEdit, gán vào trong BarEditItem của barManager, do đó việc tải dữ liệu vào và lấy kết quả của combobox nó hơi khác với một LookupEdit trên form. Các bạn tham khảo source code để hiểu rõ hơn.
Tiếp tục thực hiện load dữ liệu vào combobox cũng như gridcontrol bằng các thủ tục, sau đó gọi chúng trong sự kiện form_load:
//create datasource for cbo
private void load_cbo_gioitinh()
{
DataTable dt = new DataTable("tbl_gioitinh");
DataColumn column;
DataRow row;
column = new DataColumn();
column.DataType = System.Type.GetType("System.Int32");
column.ColumnName = "id";
dt.Columns.Add(column);
column = new DataColumn();
column.DataType = System.Type.GetType("System.String");
column.ColumnName = "gioitinh";
dt.Columns.Add(column);
//dt.Columns.Add(column);
row = dt.NewRow();
row["id"] = 0;
row["gioitinh"] = "Nam";
dt.Rows.Add(row);
row = dt.NewRow();
row["id"] = 1;
row["gioitinh"] = "Nữ";
dt.Rows.Add(row);
row = dt.NewRow();
row["id"] = 2;
row["gioitinh"] = "Không xác định";
dt.Rows.Add(row);
cbo_gioitinh.DataSource = dt;
cbo_gioitinh.DisplayMember = "gioitinh";
cbo_gioitinh.ValueMember = "id";
}
//create datasource for gridcontrols
private void load_data_grid()
{
DataTable dt;
DataColumn col;
DataRow row;
dt = new DataTable("nhanvien");
//add column
col = new DataColumn();
col.DataType = System.Type.GetType("System.String");
col.ColumnName = "hoten";
dt.Columns.Add(col);
col = new DataColumn();
col.DataType = System.Type.GetType("System.DateTime");
col.ColumnName = "ngaysinh";
dt.Columns.Add(col);
col = new DataColumn();
col.DataType = System.Type.GetType("System.String");
col.ColumnName = "gioitinh";
dt.Columns.Add(col);
col = new DataColumn();
col.DataType = System.Type.GetType("System.String");
col.ColumnName = "diachi";
dt.Columns.Add(col);
col = new DataColumn();
col.DataType = System.Type.GetType("System.String");
col.ColumnName = "noilamviec";
dt.Columns.Add(col);
//add row
row = dt.NewRow();
row["hoten"] = "Nguyễn TONA";
row["ngaysinh"] = "01/01/1991";
row["gioitinh"] = "Không Xác Ðịnh";
row["diachi"] = "Thủ Ðức";
row["noilamviec"] = "LaptrinhVB.Net";
dt.Rows.Add(row);
row = dt.NewRow();
row["hoten"] = "Thảo Meo";
row["ngaysinh"] = "01/01/1989";
row["gioitinh"] = "Nam";
row["diachi"] = "Thủ Ðức";
row["noilamviec"] = "LaptrinhVB.Net";
dt.Rows.Add(row);
row = dt.NewRow();
row["hoten"] = "Hoàng Tử Nhỏ";
row["ngaysinh"] = "01/01/1987";
row["gioitinh"] = "Nam";
row["diachi"] = "Gò Vấp";
row["noilamviec"] = "LaptrinhVB.Net";
dt.Rows.Add(row);
row = dt.NewRow();
row["hoten"] = "Gấu Nghiêm Túc";
row["ngaysinh"] = "01/01/1994";
row["gioitinh"] = "Nữ";
row["diachi"] = "Bình Thịnh";
row["noilamviec"] = "LaptrinhVB.Net";
dt.Rows.Add(row);
dgv_chitiet.DataSource = dt;
}
//Gọi các thủ tục
private void Form1_Load(object sender, EventArgs e)
{
load_cbo_gioitinh();
load_data_grid();
}
Trong danh mục sự kiện của gridView1 chọn sự kiện RowCellStyle sau đó thực hiện code như sau:
private void gridView1_RowCellStyle(object sender, DevExpress.XtraGrid.Views.Grid.RowCellStyleEventArgs e)
{
if (btn_cbo_gioitinh.EditValue != null && e.RowHandle >= 0) //tránh trường hợp cbo chưa có gì nó báo lỗi null
{
if (e.Column.Name == "col_hoten") // chỉ xử lý trong cột họ tên thôi
{
string gt = btn_cbo_gioitinh.EditValue.ToString(); //lấy giá trị của cbo giới tính trên barmanager
switch (gt)
{
case "0":
{
String celVL = gridView1.GetRowCellValue(e.RowHandle, "gioitinh").ToString(); // lấy giá trị 1 ô trong dòng đang dc focus
if (celVL == "Nam") e.Appearance.BackColor = Color.FromArgb(255, 224, 192); //chỉnh màu ô hiện tại
}
break;
case "1":
{
String celVL = gridView1.GetRowCellValue(e.RowHandle, "gioitinh").ToString();
if (celVL == "Nữ")
{
e.Appearance.BackColor = Color.FromArgb(255, 224, 192);
}
}
break;
case "2":
{
String celVL = gridView1.GetRowCellValue(e.RowHandle, "gioitinh").ToString();
if (celVL == "Không Xác Định")
{
e.Appearance.BackColor = Color.FromArgb(255, 224, 192);
}
}
break;
}
}
}
}
Như vậy là hoàn tất. Nhấn F5 và thay đổi combobox để xem kết quả.
Demo:
FullSource code.
Chúc các bạn thành công !
Mọi ý kiến đóng góp về bài viết vui lòng để lại trong phần bình luận.