DataGridView复选框全选和全不选

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

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


你可能感兴趣的:(C#)