0

不确定到底发生了什么。输入单元格时,我正在尝试将列单元格类型更改为组合框。它适用于每一行,除非 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;
   }
}
4

1 回答 1

1

RowIndex我已经测试了您的代码,并且您报告的错误在equals时没有出现ColumnIndex,但是当给定的单元格已经是DataGridViewComboBoxCell类型时。因此,可以通过以下方式轻松避免此错误:

if (dgv1.Rows[e.RowIndex].Cells["UnitEchelon"].GetType() != typeof(DataGridViewComboBoxCell))
{
    dgv1.Rows[e.RowIndex].Cells["UnitEchelon"] = cmbCell;
}

请注意,尽管给定类型(组合框、文本等)是在单元格级别设置的,但初始类型是在列级别(插入列时)创建的。您正在做的事情可能被认为不是 100% 正确/可预期的:假定列中的所有单元格都具有相同的类型;并且您不是通过为此目的依赖属性(例如,EditType)来更改单元格的类型,而只是通过对具有目标类型的变量进行分配。最后一条评论是为了以某种方式解释一种如此不灵活的行为(为什么它不会在不触发错误的情况下来回执行更改)。

于 2013-10-01T16:25:24.067 回答