我只是想从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事件吗?怎么样?
答案 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就足以应用编辑)