Lập trình C# - Dễ dàng tạo chức năng cấu hình hiển thị cột cho DataGridView

Lập trình C# với winform, bạn có thể gặp rất nhiều form quản lý các đối tượng có nhiều thông tin (nhiều cột). Nhưng người dùng nhiều khi không muốn hiển thị hết, họ muốn tự chọn cột và thứ tự hiển thị. Vậy đây là cách chúng ta làm.

Basiap - cấu hình hiển thị cột trên grid

Chúng ta sẽ tạo một Tool hiển thị danh sách cột, đánh dấu các cột đang hiên thị, cho phép người dùng check chọn hiển thị và thay đổi thứ tự cột trong listbox.

Bắt đầu chúng ta tạo 1 Form tên là: HeThongCauHinhCot. Viết phương thức khởi tạo với các mảng arrCol(danh sách cột), arrVisibleCol(danh sách cột hiển thị).

Tiếp theo cần xử lý để show 2 mảng vào CheckedListBox:

        public HeThongCauHinhCot(string[] arrCol, string[] arrVisibleCol)
        {
            InitializeComponent();
            clstCol.Items.AddRange(arrCol);
            for (int i = 0; i < arrCol.Length; i++)
            {
                if (arrVisibleCol.Contains(clstCol.Items[i].ToString()))
                {
                    clstCol.SetItemChecked(i, true);
                }
            }

        }

Thế là đã có danh sách cột để lựa chọn rồi nhé. Tiếp theo cần cho phép thay đổi tứ thự cột. Thêm 2 button lên xuống và viết code như sau:

        private void btnUp_Click(object sender, EventArgs e)
        {
            _MoveSelectedItem(clstCol, -1);
        }
        private void btnDown_Click(object sender, EventArgs e)
        {
            _MoveSelectedItem(clstCol, 1);

        }

        public void _MoveSelectedItem(ListBox listBox, int direction)
        {
            // Checking selected item
            if (listBox.SelectedItem == null || listBox.SelectedIndex < 0)
                return; // No selected item - nothing to do
 
            // Calculate new index using move direction
            int newIndex = listBox.SelectedIndex + direction;
 
            // Checking bounds of the range
            if (newIndex < 0 || newIndex >= listBox.Items.Count)
                return; // Index out of range - nothing to do
 
            object selected = listBox.SelectedItem;
 
            // Save checked state if it is applicable
            var checkedListBox = listBox as CheckedListBox;
            var checkState = CheckState.Unchecked;
            if (checkedListBox != null)
                checkState = checkedListBox.GetItemCheckState(checkedListBox.SelectedIndex);
 
            // Removing removable element
            listBox.Items.Remove(selected);
            // Insert it in new position
            listBox.Items.Insert(newIndex, selected);
            // Restore selection
            listBox.SetSelected(newIndex, true);
 
            // Restore checked state if it is applicable
            if (checkedListBox != null)
                checkedListBox.SetItemCheckState(newIndex, checkState);

        }

Xong vậy là chúng ta đã có thể thay đổi bị trí các cột lên hoặc xuống. Chúng ta còn phần tích hợp form này với 1 form quản lý nữa.

Nguyên tắc là Form quản lý sẽ gọi Form HeThongCauHinhCot đồng thời truyền danh sách cột của DataGridView lên để hiển thị.

Sau khi cấu hình xong cột trên HeThongCauHinhCot sẽ trả về các danh sách cột, trạng thái hiển thị để load lại DataGridView.

Phần này tùy từng màn hình mọi người xử lý tiếp nhé. Cách thức giống hêt khi cấu hình cột trong Windows Explorer.

Basiap cau hinh cot DataGridView

Chỉ có vậy thôi nhé, quá dễ bạn nhỉ. Nếu khó khăn bạn vui lòng để lại tin nhắn phía dưới nhé.

Một phút quảng cáo bắt đầu....

BASIAP - CÔNG NGHỆ TỐI ƯU.

Chuyên phát triển và triển khai các hệ thống phần mềm quản lý cho doanh nghiệp vừa và nhỏ trong lĩnh vực logistics xuất nhập khẩu, kho bãi, vận tải.

Các lĩnh vực phần mềm:

- Phần mềm quản lý kho dịch vụ.

- Phần mềm quản lý dịch vụ vận tải.

- Phần mềm quản lý xuất nhập khẩu.

- Các hệ thống phần mềm quản lý chuyên biệt theo yêu cầu.

HÃY LIÊN HỆ NGAY VỚI BASIAP ĐỂ XÂY DỰNG HỆ THỐNG TỐI ƯU HIỆU QUẢ DOANH NGHIỆP CỦA BẠN.

Website: basiap.com | Hotline: 0764758686 | Email: This email address is being protected from spambots. You need JavaScript enabled to view it.