我在一张表格上有几个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
答案 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);
}
当然我无法测试,但如果您有任何困难,可以在这里发表评论。