C# DataGridView 捕捉已删除行

3

1.

我正在使用一个DataGridView,它绑定了一个数据集。同时还有一个bindingNavigator。

当用户通过单击"bindingNavigatorDeleteItem"按钮删除一行时,我尝试获取被删除的行。

private void bindingNavigatorDeleteItem_Click(object sender, EventArgs e)        
{
        int crow = gridEventType.CurrentCell.RowIndex;

但它返回的是删除选定行后的新选定行。所以,如果我有两行 0、1、2,然后我删除了 2。

当前行是 1,而不是 2。我错过了什么吗?

2. 如何知道 datagridview 中是否修改了某些行?

谢谢。

4个回答

3
使用datagridview.UserDeletingRow事件获取删除的行对象。

真的,你应该把这个作为注释添加进去。 - Tom van der Woerdt

2
你应该使用 DataGridViewCellEventArgs
private void bindingNavigatorDeleteItem_Click(object sender, 
                                                  DataGridViewCellEventArgs e) 
{
   int cRow =  gridEventType.Rows[e.RowIndex];

   //delete row from persisted storage

   //rebind data to persisted storage or remove row directly:
   gridEventType.Rows.RemoveAt(cRow);
}

对于你的第二个问题,有一个CellValueChangedEvent事件。

    private void bindingNavigatorModifiedCell_CellValueChanged(object sender, 
                                                   DataGridViewCellEventArgs e)
    {
         //updated row
         int cRow = e.RowIndex;
    }

我无法添加一个接受DatagridViewCellEventArgs参数的事件处理程序来绑定bindingNavigatorDeleteItem,而且bindingNavigator没有这样的CellValueChanged事件。我认为如果我像下面这样将其用于DataGridView,它可能会起作用:public void DataGridView_CellValueChanged(...) - Devphil

0
尝试使用UserDeletingRow作为删除行的事件处理程序,在此方法内部,您可以获取行索引并按如下方式操作:
 private void dataGridView1_UserDeletingRow(object sender, DataGridViewRowCancelEventArgs e)
    {
        int tmpId = (int) e.Row.Index;
    }

0

关于我的问题#1。

  • 将BindingNavigator的“DeleteItem”属性更改为(无)
  • 创建“DeleteItem_Clicked”的事件处理程序
  • 通过以下方式获取当前行号

    int cRow = gridEventType.CurrentCell.RowIndex;

  • 从bindingsource中删除当前项目

    BindingNavigator.BindingSource.RemoveCurrent();


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接