无法从DataGridView中删除行

时间:2010-11-29 16:17:44

标签: c# datagridview

我只是想从DataGridView中删除一行。基本上,第一列是组合框,当用户从组合框中选择“[Remove]”时,应删除整行。所以我有这个OnCellEndEdit事件代码:

if (grid.CurrentCell.ColumnIndex == 0 && grid.CurrentRow.Cells[0].Value.ToString()=="[Remove]") {
  grid.EndEdit();
  grid.Rows.RemoveAt(grid.CurrentRow.Index);
}

不是删除行,而是抛出异常:

操作无效,因为它会导致对SetCurrentCellAddressCore函数的可重入调用。

在删除之前,我尝试将CurrentRow移动到其他列,如下所示:

DataGridViewRow deleteRow = grid.CurrentRow;
grid.CurrentRow.Selected = false;
grid.Rows[deleteRow+1].Selected = true;
grid.Rows.RemoveAt(deleteRow);

同样的问题。网格的AllowUserToDeleteRows属性为true。我没有将数据绑定到此控件。

我认为问题在于我与CellEndEdit事件的关系,好像我从按钮控件的OnClick事件中删除了一行,我很好。

我可以以编程方式触发按钮的OnClick事件吗?怎么样?

2 个答案:

答案 0 :(得分:1)

看起来您已经在OnCellEndEdit来电,所以我不认为您需要再次致电grid.EndEdit()。尝试删除该调用,看看该行是否被删除。我认为错误是因为你可能最终陷入无限循环。

答案 1 :(得分:0)

在应用修改前使用以下检查:

public void myGrid_EndEdit(object sender, DataGridViewCellEventArgs e) 
{
  if (!myGrid.Rows[e.RowIndex].Cells[e.ColumnIndex].Selected)
                return;
  //...rest of your code to apply edit below...
}

这适用于正在编辑的任何单元格。(失去焦点时不应用编辑代码;输入Enter就足以应用编辑)