更改数据集的延迟执行

本文关键字:延迟 执行 数据集 | 更新日期: 2023-09-27 18:27:39

当视图被过滤时,我想使用延迟执行来更新数据网格视图中的更改数据。目前,我有一个可以过滤的行数组,然后可以搜索过滤后的数据。我使用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_filteredDatam_searchedData过滤器在旧的m_mainData数据集上执行,而不是在新的更新数据集上。我有点理解为什么会这样,但我不知道我有什么选择来解决这个问题。

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

更改数据集的延迟执行

要使m_mainDatam_filteredDatam_searchedData延迟,只需删除顶部语句中的ToArray()即可:

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

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