我有一些要求在我的数据网格中实现一个非常非标准的排序,网格当前绑定到带有原始行数据行过滤器集的DataView,数据是实时的,所以我做了一个接受更改每秒定时器以显示对基础数据表所做的任何更改。网格是只读的,它纯粹显示实时数据。
为简洁起见,我将跳过排序的详细信息。为了解决这个问题,我实现了一些自定义数据视图(只读),它接受DataView作为源数据(允许我仍然过滤行状态并保留实时数据的虚拟网格模式)。此集合/数据视图可以绑定到网格。我的问题是保持自定义数据视图的内部集合更新基础数据视图的任何更改。我首先尝试听取基础数据视图的ListChanged事件,但即使我只在基础数据表上添加一行并调用接受更改,我得到重置事件类型意味着我必须刷新整个集合 - 我们可以谈论由于对单行的更新,数千行被刷新(并重新排序)。
之前有任何经验吗?我想知道网格是如何做到的,我知道即使你给它一个数据表,它实际上将自己绑定到表的默认视图,所以这意味着数据网格正在从它的视图重新加载整个数据行集合,即使对于单行更新?
对不起,很长的帖子!!
欣赏任何输入,变通方法,甚至设计替代方案......
由于 阿德里安
答案 0 :(得分:0)
根据您正在使用的网格类型,使用该网格的内置功能进行自定义排序(如果有的话)而不是走这条路可能是一项更简单的任务。
话虽如此,始终在AcceptChanges
上调用DataTable
背后的原因是什么?所做的只是将所有行的RowState
设置为Original
,这不应该对通过您正在使用的DataView
进行过滤和排序的内容产生任何影响,除非它有一个有效的RowStateFilter
。
如果您取消AcceptChanges
的电话(或者即使您在个人DataRow
上呼叫,而不是DataTable
本身),您应该可以使用{{ 1}}。