winform datagridview在添加全选checkbox时提示:不能设置 selected 或 selected 既不是表 Table 的 DataColumn 也不是 DataRelation。

时间:2023-03-09 16:22:21
winform datagridview在添加全选checkbox时提示:不能设置 selected 或 selected 既不是表 Table 的 DataColumn 也不是 DataRelation。

在项目中,需要多选功能,于是在datagridview添加了一列DataGridViewCheckBoxColumn

winform datagridview在添加全选checkbox时提示:不能设置 selected 或 selected 既不是表 Table 的 DataColumn 也不是 DataRelation。

在给datagridview绑定完数据集之后,对全选进行操作的时候,发现总报错,报错内容如下:

不能设置 selected 

selected 既不是表 Table 的 DataColumn 也不是 DataRelation。

在看到第一个错误信息的时候还有点懵,不知道是什么地方错了,导致不能设置,可是第二个错误一出来,马上就清楚明白了。原来是datagridview绑定的数据集没有selected这个字段。

知道原因,就好解决了,我们只需在绑定数据集之前,往里面添加selected即可。

winform datagridview在添加全选checkbox时提示:不能设置 selected 或 selected 既不是表 Table 的 DataColumn 也不是 DataRelation。

加完之后就不报错啦。

附:加全选的代码:

winform datagridview在添加全选checkbox时提示:不能设置 selected 或 selected 既不是表 Table 的 DataColumn 也不是 DataRelation。

 #region CheckBox的添加
//在左上角做一个全选
ckBox = new CheckBox();
Rectangle rect = dgv_drug_dict.GetCellDisplayRectangle(CSelect.Index, -, false);
ckBox.Size = new Size(, dgv_drug_dict.ColumnHeadersHeight - );
ckBox.AutoSize = true;
rect.Y += ;
ckBox.Location = rect.Location;
ckBox.Text = this.CSelect.HeaderText;
CSelect.HeaderText = "";
this.dgv_drug_dict.Controls.Add(ckBox);
ckBox.Checked = false;
ckBox.CheckedChanged += new EventHandler(ckBox_CheckedChanged);
#endregion
 /// <summary>
/// 多选框的选择
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void ckBox_CheckedChanged(object sender, EventArgs e)
{
DataView dv = (DataView)dgv_drug_dict.DataSource;
if (dv == null) return;
this.dgv_drug_dict.EndEdit();
for (int j = ; j < dv.Count; j++)
{
if (this.ckBox.Checked)
dv[j]["selected"] = "";
else
dv[j][CConst.DGV_SELECTD] = DBNull.Value;
}
this.dgv_drug_dict.EndEdit();
dgv_drug_dict.Invalidate();
}