DataGridView:c#通用UserDeletingRow,用于同一表单上的多个网格

DataGridView:c#通用UserDeletingRow,用于同一表单上的多个网格,c#,datagridview,C#,Datagridview,我在一张表格上有几个DGV。它们都绑定了数据源。 它们都需要具备“软”删除行的能力(不是真正删除行,而是标记要删除的行并将其隐藏在网格中)。删除将在稍后日期进行 我在网格上有一个过滤器:hiatusBindingSource.filter=“IsDeleted=false” 但是我不确定在设置“delete”标志后如何应用过滤器,所以我想出了以下代码来处理特定的dgv 我只想有一个通用子来处理所有的DGV。(我有多张相同问题的表格。) TIA如果您的所有DataGridView都使用Bindin

我在一张表格上有几个DGV。它们都绑定了数据源。 它们都需要具备“软”删除行的能力(不是真正删除行,而是标记要删除的行并将其隐藏在网格中)。删除将在稍后日期进行

我在网格上有一个过滤器:
hiatusBindingSource.filter=“IsDeleted=false”
但是我不确定在设置“delete”标志后如何应用过滤器,所以我想出了以下代码来处理特定的dgv

我只想有一个通用子来处理所有的DGV。(我有多张相同问题的表格。)


TIA

如果您的所有DataGridView都使用BindingSource进行绑定,并且用作BindingSource数据源的类派生出一个定义了IsDeleted属性的公共基类,那么我认为您可以使用如下代码为所有DataGrid创建一个事件处理程序

private void common_dgv_DeletingRow(object sender, DataGridViewRowCancelEventArgs e)
{
    e.Cancel = true;
    DataGridView dgv = sender as DataGridView;
    BindingSource bs = dgv.DataSource as BindingSource;
    bs.SuspendBinding();
    e.Row.Visible = false;
    bs.ResumeBinding();
    ((basex)e.Row.DataBoundItem).IsDeleted = true;
    SetFormMode(Globals.FormStatusMode.Save);
}

当然,我无法测试它,但是如果您有任何困难,可以在这里进行注释。

如果您的类派生自一个公共基类,其中IsDeleted属性对于所有派生类都是公共的,那么这将很容易!当然我有一个基础班。现在就叫它“basex”。有没有比我所拥有的更好的设置“IsDeleted”的方法?谢谢,太好了!!!!成功了。我必须做1个调整:BindingSource bs=(BindingSource)dgv.DataSource;还有一个问题-->因为我在BindingSource上有一个筛选器,hiatusBindingSource.filter=“IsDeleted=false”;在设置“IsDeleted=true;”之后,是否有其他方法可以通过应用过滤器来隐藏行?谢谢你的帮助。我真的很感激。
private void common_dgv_DeletingRow(object sender, DataGridViewRowCancelEventArgs e)
{
    e.Cancel = true;
    DataGridView dgv = sender as DataGridView;
    BindingSource bs = dgv.DataSource as BindingSource;
    bs.SuspendBinding();
    e.Row.Visible = false;
    bs.ResumeBinding();
    ((basex)e.Row.DataBoundItem).IsDeleted = true;
    SetFormMode(Globals.FormStatusMode.Save);
}