在项目中,需要多选功能,于是在datagridview添加了一列DataGridViewCheckBoxColumn
在给datagridview绑定完数据集之后,对全选进行操作的时候,发现总报错,报错内容如下:
不能设置 selected
selected 既不是表 Table 的 DataColumn 也不是 DataRelation。
在看到第一个错误信息的时候还有点懵,不知道是什么地方错了,导致不能设置,可是第二个错误一出来,马上就清楚明白了。原来是datagridview绑定的数据集没有selected这个字段。
知道原因,就好解决了,我们只需在绑定数据集之前,往里面添加selected即可。
加完之后就不报错啦。
附:加全选的代码:
1 #region CheckBox的添加 2 //在左上角做一个全选 3 ckBox = new CheckBox(); 4 Rectangle rect = dgv_drug_dict.GetCellDisplayRectangle(CSelect.Index, -1, false); 5 ckBox.Size = new Size(10, dgv_drug_dict.ColumnHeadersHeight - 2); 6 ckBox.AutoSize = true; 7 rect.Y += 2; 8 ckBox.Location = rect.Location; 9 ckBox.Text = this.CSelect.HeaderText; 10 CSelect.HeaderText = ""; 11 this.dgv_drug_dict.Controls.Add(ckBox); 12 ckBox.Checked = false; 13 ckBox.CheckedChanged += new EventHandler(ckBox_CheckedChanged); 14 #endregion
1 /// <summary> 2 /// 多选框的选择 3 /// </summary> 4 /// <param name="sender"></param> 5 /// <param name="e"></param> 6 void ckBox_CheckedChanged(object sender, EventArgs e) 7 { 8 DataView dv = (DataView)dgv_drug_dict.DataSource; 9 if (dv == null) return; 10 this.dgv_drug_dict.EndEdit(); 11 for (int j = 0; j < dv.Count; j++) 12 { 13 if (this.ckBox.Checked) 14 dv[j]["selected"] = "1"; 15 else 16 dv[j][CConst.DGV_SELECTD] = DBNull.Value; 17 } 18 this.dgv_drug_dict.EndEdit(); 19 dgv_drug_dict.Invalidate(); 20 }