DataView.Rowfilter过滤父表单的数据集

时间:2013-12-09 14:27:34

标签: c# dataview

我正在尝试过滤我的数据视图。所以我有以下事件处理程序:

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中的数据,但是父表单中的数据实际上是被过滤的。我可以通过循环来解决这个问题,但我认为使用更少的代码会很好 - 并且可能会使这个过程更有效率。

有人能为我解释一下吗?

1 个答案:

答案 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 ) + "'";
    }
}
如果GetERPLuTableFromCacheDataTable,则

DataView dvBreaks = ParentForm.CurrentUser
    .Cache
    .GetERPLuTableFromCache( Db.CustomDbMetaData.CachedTables.Breaks )
    .Copy()
    .DefaultView;