Winform分頁控件支持表頭全選操作實現之最優方法


在我之前的文章《Winform分頁控件支持表頭全選操作實現》中,有介紹過一種方法來實現DataGridView的表頭全選操作,不過這種方式,是通過綁定字段的方式實現,每次需要創建一個字段來專門做這個列頭綁定,顯得有點多余。那有沒有更好的方式呢,當然有,我這里介紹一種更好表頭全選實現的方式,然后說明我的分頁控件封裝后是如何簡單實現這種效果的。

1)傳統的DataGridView全選實現效果。

拋開我的分頁控件來講,實現傳統的DataGridView的表頭全選的方式,只需要引入一個類DatagridViewCheckBoxHeaderCell,它繼承自DataGridViewColumnHeaderCell,我們來看具體的使用代碼:

public FrmNormalGridViewSelect2()
        {
            InitializeComponent();

            if (!this.DesignMode)
            {
                DataGridViewCheckBoxColumn colCB = new DataGridViewCheckBoxColumn();
                DatagridViewCheckBoxHeaderCell cbHeader = new DatagridViewCheckBoxHeaderCell();
                colCB.HeaderCell = cbHeader;
                this.dgvSelectAll.Columns.Add(colCB);

                cbHeader.OnCheckBoxClicked += new CheckBoxClickedHandler(cbHeader_OnCheckBoxClicked);
            }
        }

        void cbHeader_OnCheckBoxClicked(bool state)
        {
            foreach (DataGridViewRow Row in dgvSelectAll.Rows)
            {
                Row.Cells[0].Value = state;
                Row.Selected = state;
            }
            this.dgvSelectAll.RefreshEdit();
        }

這樣額外的代碼操作即可實現表頭全選的操作了,實現效果如下所示

2)基於DevExpress的GridControl控件的全選實現。

做戲做全套,我們在開發中,也經常使用到基於DevExpress的系統界面開發,那么,不用創建字段的方式,在GridControl中有無好的實現方法呢。當然有,下面我來介紹一下。

首先引入一個GridCheckMarksSelection類,這個類就是用來實現這種全選效果的,我們看看其使用的代碼。

        public FrmDevGridViwSelect2()
        {
            InitializeComponent();

            this.gridView1.OptionsBehavior.Editable = true;
            this.gridView1.OptionsBehavior.ReadOnly = false;
            this.gridControl1.DataSourceChanged += new EventHandler(gridControl1_DataSourceChanged);
        }

        void gridControl1_DataSourceChanged(object sender, EventArgs e)
        {
            GridCheckMarksSelection selection = new GridCheckMarksSelection(gridView1);
            selection.CheckMarkColumn.VisibleIndex = 0;
            selection.CheckMarkColumn.Width = 60;
        }

是不是很簡單呢,它最終實現的效果會如下所示。

 

3)基於我的分頁控件的全選操作

有這么好的實現效果,我當然會把它集成到我的分頁控件里面了,當然,為了追求簡單就是美的方式,我會盡量簡化客戶的使用代碼。我們只需要設置一個屬性即可實現表頭全選的操作了(DevExpress版本和傳統版本代碼一樣)。

this.winGridViewPager1.ShowCheckBox = true;

我們來看看基於我的分頁控件實現的表頭全選功能,界面效果如何。

1)傳統界面的效果

 

2)DotNetBar界面效果

 

3)DevExpress界面效果 

 

這樣的簡單調用就能實現表頭全選的操作,不需要另外其他額外的操作,是不是很好,簡潔呢?這其實就是我追求的表頭全選的最優方法了。

最后,可能讀者還有一個疑問,就是我全選或者部分選擇,我要知道我選擇的是那些行,該怎么操作呢?放心,我這個分頁控件也已經為你考慮了,呵呵。

通過調用下面的代碼即實現。

        private void btnGetCheckedRows_Click(object sender, EventArgs e)
        {
            List<int> list = this.winGridViewPager1.GetCheckedRows();
            StringBuilder sb = new StringBuilder();
            int i = 1;
            foreach (int rowindex in list)
            {
                sb.Append(rowindex.ToString() + ",");
                if (i++ % 10 == 0)
                {
                    sb.Append("\r\n");
                }
            }
            MessageUtil.ShowTips(sb.ToString());
        }

 

演示例子下載:

分頁控件傳統界面例子  分頁控件DevExpress樣式例子

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM