当前位置:首页 > Windows程序 > 正文

DataGridView复选框全选和全不选

2021-05-24 Windows程序

      今天测试的又提新的要求了,说是我的第一列的复选框不能全选活着全部取消,这样会影响用户的使用效果。测试的提了要求,那就改吧,但是中间还经历了一些小挫折,这里给大家分享一下。哈哈。

       因为.net framework自带的Datagridview自身的这个控件是没有咱们平时用的全选全不选的复选框的,他的表头就只有这一列的名称,开始思路走的有点弯了,于是就想画一个得了,于是在晚上找了一篇博客。 ,但是画的途中发现了好多的问题,于是又放弃了画一个文本框的想法。 

       后来就在表头放了一个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);        其中这三行的代码就是先取消这个发生的时间,然后再将复选框状态为不选中,然后重新开始这个时间,,也可以理解成先不要这方法了,然后执行完第二行的代码,在要这个代码。

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/70323.html