DataGridView复选框全选和全不选

来源:互联网 发布:java非法字符65279 编辑:程序博客网 时间:2024/05/20 11:25

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

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


0 0