1

我想在过滤视图时使用延迟执行来更新数据网格视图中的更改数据。目前我有一个可以过滤的行数组,然后可以搜索过滤后的数据。我使用 linq 查询来过滤数据并搜索数据。我在下面总结了我是如何做到这一点的。

IEnumerable<SomeDataRowType> m_mainData =
  (select from someDataContext
   new SomeDataRowType {
     properties...
   }).ToArray();

IEnumerable<SomeDataRowType> m_filteredData =
  m_mainData.Where(r => r.SomeProperty == someValue);

IEnumerable<SomeDataRowType> m_searchedData =
  m_filteredData.Where(r => r.SomeProperty.Contains(someSearchTerm));

myDataGridView.DataSource = new SortableBindingList<SomeDataRowType>(m_searchedData.ToArray());

现在,如果m_mainData数据集没有改变,这将非常有用。我可以清除搜索查询并返回到过滤查询,或者同时删除它们,或者只应用搜索查询。不幸的是,如果m_mainData集合确实发生了变化m_filteredData,那么m_searchedData过滤器将在旧m_mainData数据集而不是新的更新数据集上执行。我有点理解为什么会这样,但我不知道我的选择是什么来解决这个问题。

如果有任何不清楚的地方,我深表歉意。谢谢您的帮助!

4

1 回答 1

1

要使m_mainData和deferred m_filteredDatam_searchedData只需删除ToArray()顶部语句中的 :

IEnumerable<SomeDataRowType> m_mainData =
  (select from someDataContext
   new SomeDataRowType {
     properties...
   });

但是请注意,我强烈怀疑您的SortableBindingList<T>内部填充了某种形式的列表:winforms/wpf/etc 模型中的数据绑定是IList基于大量的,并SortableBindingList<T>建议与BindingList<T>. 如果是这种情况,绑定列表永远不会被延迟 - 因此您可能不需要简单地重新绑定。甚至更好:只需直接维护绑定列表- 绑定列表的全部意义在于它传播更改通知。

于 2013-08-14T07:08:23.450 回答