NEWS

Thay đổi màu nền của ô trong GridControl Devexpress bằng C#

Thay đổi màu nền của ô trong GridControl Devexpress bằng C#
Đăng bởi: TONA Cody - Lượt xem: 19879 10:12:16, 23/02/2017DEVEXPRESS   In bài viết

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.​

thay-doi-mau-nen-o-tren-luoi-devexpress-c#

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.

 

Tags: gridview

THÔNG TIN TÁC GIẢ

BÀI VIẾT LIÊN QUAN

Thay đổi màu nền của ô trong GridControl Devexpress bằng C#
Đăng bởi: TONA Cody - Lượt xem: 19879 10:12:16, 23/02/2017DEVEXPRESS   In bài viết

CÁC BÀI CÙNG CHỦ ĐỀ

Đọc tiếp
.