更改数据集的延迟执行
本文关键字:延迟 执行 数据集 | 更新日期: 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_filteredData
和m_searchedData
过滤器在旧的m_mainData
数据集上执行,而不是在新的更新数据集上。我有点理解为什么会这样,但我不知道我有什么选择来解决这个问题。
如果有任何不清楚的地方,我深表歉意。谢谢你的帮助!
要使m_mainData
、m_filteredData
和m_searchedData
延迟,只需删除顶部语句中的ToArray()
即可:
IEnumerable<SomeDataRowType> m_mainData =
(select from someDataContext
new SomeDataRowType {
properties...
});
但是,请注意,我强烈怀疑您的SortableBindingList<T>
在内部填充了某种形式的列表:winforms/wpf/etc模型中的数据绑定在很大程度上是基于IList
的,而SortableBindingList<T>
建议使用与BindingList<T>
相关的自定义类。如果是这种情况,绑定列表将永远不会被推迟,因此您可能不需要根据需要简单地重新绑定。或者更好:只需直接维护绑定列表-绑定列表的全部意义在于它传播更改通知。