不确定究竟发生了什么。我正在尝试在输入单元格时将列单元格类型更改为组合框。当RowIndex和ColumnIndex相同时,它适用于每一行。当我选择该行/列时,我得到“操作无效,因为它导致对SetCurrentCellAddressCore函数的可重入调用。
dgv1_CellEnter(object sender, DataGridViewCellEventArgs e)
{
if(e.ColumnIndex == dgv1.Columns["ColumnName"].Index)
{
DataGridViewComboBoxCell cmbCell = new DataGridViewComboBoxCell();
foreach(string v in values)
{
cmbCell.Items.Add(v);
}
dgv1.Rows[e.RowIndex].Cells["UnitEchelon"] = cmbCell;
}
}
答案 0 :(得分:1)
我已对您的代码进行了测试,当RowIndex
等于ColumnIndex
时,您报告的错误不会显示,但是当给定的单元格已经是DataGridViewComboBoxCell
类型时。因此,可以通过以下方式轻松避免此错误:
if (dgv1.Rows[e.RowIndex].Cells["UnitEchelon"].GetType() != typeof(DataGridViewComboBoxCell))
{
dgv1.Rows[e.RowIndex].Cells["UnitEchelon"] = cmbCell;
}
请注意,虽然在单元级别设置了给定类型(组合框,文本等),但是在列级别(插入列时)会创建初始类型。您正在做的事情可能被视为不是100%正确/可预期:列中的所有单元格都被假定为具有相同的类型;并且您不是为了这个目的而依赖于属性来改变单元格的类型(例如,EditType
),而只是通过对具有目标类型的变量进行赋值。最后一条评论是以某种方式解释一种如此不灵活的行为(为什么它不会在不触发错误的情况下来回执行更改)。