首页 > 技术文章 > winform datagridview在添加全选checkbox时提示:不能设置 selected 或 selected 既不是表 Table 的 DataColumn 也不是 DataRelation。

wsn1203 2018-12-03 15:02 原文

在项目中,需要多选功能,于是在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         }

 

推荐阅读