代码之家  ›  专栏  ›  技术社区  ›  Marc Bernier

无法从DataGridView中删除行

  •  2
  • Marc Bernier  · 技术社区  · 14 年前

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

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

    这将引发异常,而不是删除行:

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

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

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

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

    我相信问题在于我绑定到CellEndEdit事件,就好像我从按钮控件的OnClick事件中删除了行一样,我没事。

    我可以用程序触发按钮的OnClick事件吗?怎么用?

    2 回复  |  直到 14 年前
        1
  •  1
  •   SwDevMan81    14 年前

    看来你已经在 OnCellEndEdit 打电话,所以我觉得你不需要打电话 grid.EndEdit() 再一次。尝试删除该调用并查看行是否被删除。我相信这个错误是因为你可能会在无限循环中结束。

        2
  •  0
  •   Apex ND    10 年前

    在应用编辑之前,请使用以下检查:

    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即可应用编辑)

    推荐文章