- [VB.NET] Chia sẻ source code lịch âm dương và hẹn lịch nhắc việc
- [C#] Hướng dẫn đọc thông số thiết bị Thiết bị kiểm tra Pin (HIOKI BATTERY HiTESTER BT3562)
- [VB.NET] Hướng dẫn giải captcha sử dụng dịch vụ AZCaptcha API trên winform
- [C#] Hướng dẫn chứng thực đăng nhập ứng dụng bằng vân tay (Finger Print) trên máy tính
- [C#] Color Thief cách xuất màu sắc thiết kế từ hình ảnh
- [C#] Cách tạo bản quyền và cho phép dùng thử ứng dụng Winform
- [C#] Hướng dẫn sử dụng trình duyệt web Chrome convert HTML sang tập tin file PDF
- [C#] Kết nôi điện thoại Android, IOS với App Winform via Bluetooth
- [DATABASE] Cách query cộng trừ dồn dần trong Sqlserver
- [C#] Thiết kế ứng dụng Console đẹp với thư viện Spectre.Console
- [C#] Thiết kế ứng dụng Single Instance và đưa ứng dụng lên trước nếu kiểm tra ứng dụng đang chạy
- [C#] Giới thiệu JSON Web Token và cách đọc chuỗi token
- [C#] Cách tăng giảm font chữ tất cả các control trên winform
- [DEVEXPRESS] Tích hợp chức năng Tìm kiếm Search vào CheckedComboboxEdit
- [C#] Gởi email Metting Calendar Reminder kèm nhắc thời gian lịch họp
- [C#] Tìm kiếm xem danh sách từ khóa có tồn tại trong đoạn văn bản hay không
- [C#] Thiết kế giao diện ứng dụng trên Console sử dụng thư viện Terminal.Gui
- [C#] Hướng dẫn tạo mã VietQR Payment API Winform
- [C#] Sử dụng thư viện BenchmarkDotNet đo hiệu năng của hảm Method
- [DEVEXPRESS] Tìm kiếm không dấu tô màu highlight có dấu trên C# 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.