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

时间:2016-01-09 20:26:32

标签: c# datagridview

我在一张表格上有几个dgv。它们都有绑定的数据源。 他们都需要有能力软化"删除行(不是真的删除它们,而是将行标记为删除并将其隐藏在网格上)。删除将在以后发生。

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

我想只有一个通用子句来处理所有的dgv。 (我有多个形式有同样的问题。)

private void dgvHiatus_UserDeletingRow(object sender, DataGridViewRowCancelEventArgs e)
{
    e.Cancel = true;
    hiatusBindingSource.SuspendBinding();
    e.Row.Visible = false;
    hiatusBindingSource.ResumeBinding();
    ((Hiatus)e.Row.DataBoundItem).IsDeleted = true;
    SetFormMode(Globals.FormStatusMode.Save);
}

TIA

1 个答案:

答案 0 :(得分:1)

如果你的所有DataGridView都使用BindingSouce绑定,并且用作BindingSource的DataSource的类派生了一个定义了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);
}

当然我无法测试,但如果您有任何困难,可以在这里发表评论。