我正在尝试过滤我的数据视图。所以我有以下事件处理程序:
private void Break_ValueChanged(object sender, EventArgs e)
{
DataView dvBreaks = ParentForm.CurrentUser.Cache.GetERPLuTableFromCache( Db.CustomDbMetaData.CachedTables.Breaks ).DefaultView;
if( Convert.ToString( Break.Value ) != string.Empty ) {
dvBreaks.RowFilter = "BREAK = '" + Convert.ToString( Break.Value ) + "'";
}
}
当我查看这段代码时,我的理解是它只应该过滤dvBreaks中的数据,但是父表单中的数据实际上是被过滤的。我可以通过循环来解决这个问题,但我认为使用更少的代码会很好 - 并且可能会使这个过程更有效率。
有人能为我解释一下吗?
答案 0 :(得分:1)
它正在过滤父表单,因为您从父表单中获取引用。如果您希望仅过滤子,那么您将需要该子项的副本,并将该副本用于数据绑定。
您可以像这样更改代码:
private void Break_ValueChanged(object sender, EventArgs e)
{
DataView dvBreaks = ParentForm.CurrentUser
.Cache
.GetERPLuTableFromCache( Db.CustomDbMetaData.CachedTables.Breaks )
.DefaultView
.ToTable()
.DefaultView;
if( Convert.ToString( Break.Value ) != string.Empty ) {
dvBreaks.RowFilter = "BREAK = '" + Convert.ToString( Break.Value ) + "'";
}
}
如果GetERPLuTableFromCache
是DataTable
,则或:
DataView dvBreaks = ParentForm.CurrentUser
.Cache
.GetERPLuTableFromCache( Db.CustomDbMetaData.CachedTables.Breaks )
.Copy()
.DefaultView;