DataGridView複選框全選和全不選
阿新 • • 發佈:2019-02-18
今天測試的又提新的要求了,說是我的第一列的複選框不能全選活著全部取消,這樣會影響使用者的使用效果。測試的提了要求,那就改吧,但是中間還經歷了一些小挫折,這裡給大家分享一下。哈哈。
因為.net framework自帶的Datagridview自身的這個控制元件是沒有咱們平時用的全選全不選的複選框的,他的表頭就只有這一列的名稱,開始思路走的有點彎了,於是就想畫一個得了,於是在晚上找了一篇部落格。http://www.cnblogs.com/gossip/archive/2008/11/22/1338868.html ,但是畫的途中發現了好多的問題,於是又放棄了畫一個文字框的想法。
後來就在表頭放了一個CheckBox,全選都好實現,但是實現到咱們用的程度,還真是費了點勁。
private void chkIn_CheckedChanged(object sender, EventArgs e) { //全選的複選框選中 if (chkIn.Checked == true) { //選中全部 for (int i = 0; i < this.DGVInBogie.Rows.Count; i++) { this.DGVInBogie.Rows[i].Cells["S_Choice"].Value = true; } } 全選的複選框取消 else { //全部取消 for (int i = 0; i < DGVInBogie.Rows.Count; i++) { this.DGVInBogie.Rows[i].Cells["S_Choice"].Value = false; } } }
上邊的程式碼是全選或者全部取消,重點是下邊的程式碼
這個程式碼就是我們如果全部選擇,但是有一行資料我們不需要,我們取消的話,全選的複選框也取消。其中private int countOut; private void DGVInBogie_CellContentClick(object sender, DataGridViewCellEventArgs e) { countOut = 0; string ck = string.Empty; //計算選中了多少條資料 for (int i = 0; i < DGVInBogie.Rows.Count; i++) { ck = this.DGVInBogie.Rows[i].Cells["S_Choice"].EditedFormattedValue.ToString(); if (ck == "True") { countOut++; } } //如果都選中,全選的複選框選中 if (countOut == DGVInBogie.Rows.Count) { chkIn.Checked = true; } //如果沒有全選中,則取消全選複選框。 if (countOut != DGVInBogie.Rows.Count) { chkIn.CheckedChanged -= new EventHandler(chkIn_CheckedChanged); chkIn.Checked = false; chkIn.CheckedChanged += new EventHandler(chkIn_CheckedChanged); } }
chkIn.CheckedChanged -= new EventHandler(chkIn_CheckedChanged);
chkIn.Checked = false;
chkIn.CheckedChanged += new EventHandler(chkIn_CheckedChanged);
其中這三行的程式碼就是先取消這個發生的時間,然後再將複選框狀態為不選中,然後重新開始這個時間,也可以理解成先不要這方法了,然後執行完第二行的程式碼,在要這個程式碼。