【问题标题】:DataView.Rowfilter filtering parent-form's datasetDataView.Rowfilter 过滤父窗体的数据集
【发布时间】:2013-12-09 14:27:34
【问题描述】:

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

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

谁能帮我解释一下?

【问题讨论】:

  • 非常感谢迈克尔!我认为做到了。
  • PS - 我使用了你的第一个解决方案。

标签: c# dataview


【解决方案1】:

它正在过滤父表单,因为您正在从父表单中获取 reference。如果您希望它只过滤孩子,那么您需要为孩子提供一份副本并将该副本用于数据绑定。

您可以像这样更改代码:

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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-05
    • 1970-01-01
    • 2015-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-25
    • 1970-01-01
    相关资源
    最近更新 更多