今天测试的又提新的要求了,说是个人第一列的复选框不能全选活着所有取消,这样会影响用户的使用效果。测试的提了要求,那就改吧,可是中间还经历了一些小挫折,这里给你们分享一下。哈哈。html
由于.net framework自带的Datagridview自身的这个控件是没有我们平时用的全选全不选的复选框的,他的表头就只有这一列的名称,开始思路走的有点弯了,因而就想画一个得了,因而在晚上找了一篇博客。http://www.cnblogs.com/gossip/archive/2008/11/22/1338868.html ,可是画的途中发现了好多的问题,因而又放弃了画一个文本框的想法。 测试
后来就在表头放了一个CheckBox,全选都好实现,可是实现到我们用的程度,还真是费了点劲。this
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);其中这三行的代码就是先取消这个发生的时间,而后再将复选框状态为不选中,而后从新开始这个时间,也能够理解成先不要这方法了,而后执行完第二行的代码,在要这个代码。