Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 自定义数据视图_C#_Datatable_Dataview - Fatal编程技术网

C# 自定义数据视图

C# 自定义数据视图,c#,datatable,dataview,C#,Datatable,Dataview,我需要在我的数据网格中实现一个非常非标准的排序,网格当前绑定到带有原始行数据行筛选器集的DataView,数据是实时的,所以我每秒都在计时器上执行一次accept changes,以显示对基础数据表所做的任何更改。网格是只读的,它纯粹是显示实时数据 为了简单起见,我将跳过排序的细节。为了解决这个问题,我实现了一些自定义的只读数据视图,它接受一个DataView作为源数据,允许我仍然按行状态进行过滤,并为实时数据保留虚拟网格模式。此集合/数据视图可以绑定到网格。我的问题是使用基础数据视图上的任何更

我需要在我的数据网格中实现一个非常非标准的排序,网格当前绑定到带有原始行数据行筛选器集的DataView,数据是实时的,所以我每秒都在计时器上执行一次accept changes,以显示对基础数据表所做的任何更改。网格是只读的,它纯粹是显示实时数据

为了简单起见,我将跳过排序的细节。为了解决这个问题,我实现了一些自定义的只读数据视图,它接受一个DataView作为源数据,允许我仍然按行状态进行过滤,并为实时数据保留虚拟网格模式。此集合/数据视图可以绑定到网格。我的问题是使用基础数据视图上的任何更改来更新自定义数据视图的内部集合。起初,我尝试侦听基础数据视图的ListChanged事件,但即使我只在基础数据表上添加一行并调用accept changes,我也会得到重置事件类型,这意味着我必须刷新整个集合—我们可能会说,由于对单个行的更新,数千行被刷新和重新排序划船

有没有人有过这样的经历?我想知道网格是如何做到的,我知道即使你给它一个数据表,它实际上是将自己绑定到表的默认视图上的,那么这是否意味着数据网格从它的视图中重新加载整个数据行集合,即使是单行更新

抱歉发了这么长的帖子

欣赏任何输入、解决方法甚至设计方案

谢谢
Adrian

根据您使用的网格类型,如果存在自定义排序功能,则使用该网格的内置功能进行自定义排序可能比使用此功能更简单

也就是说,总是在DataTable上调用AcceptChanges的原因是什么?所要做的就是将所有行上的RowState设置为Original,这不会对正在使用的DataView中过滤和排序的内容产生任何影响,除非它具有活动的RowStateFilter


如果您调用AcceptChanges,或者即使您在单个数据行上调用它,而不是在数据表本身上调用它,您应该能够使用ListChanged。

好的,排序有点得体,我还没有看到任何提供此类功能的网格-总结排序,用户希望以分组方式对数据进行排序,他们可以选择要分组的列,然后选择要排序的列。如果首先满足某个条件,则将使用简单的多列比较器对不满足该条件的任何行进行排序,为此,这意味着我必须比较行组,因此需要某种自定义数据视图来处理此问题。AcceptChanges调用通常用于网格和DataTable之间的DataView与一些DataViewRowState.OriginalRows,在显示实时更新的数据时,我们几乎总是使用dataview,因此我们的想法是,可以将此自定义数据视图插入dataview和网格之间,以启用此排序。我知道的唯一方法是使用DataTable而不是DataView,但是我们没有选择使用DataViewRowState,这是许多应用程序所必需的。我如何在自己的数据视图中使用DataViewRowState…没有任何网格提供您描述的特定排序功能。然而,有很多网格,尽管据我所知DataGridView并不在其中,它为用户提供了按他们认为合适的方式对行进行排序的能力,通常是通过事件模型。通常,网格会引发一个事件,向您传递两行,然后返回一个标准比较值-1、0或1来比较网格中的行。您不想显示除DataRowState.Original以外的任何行,这有什么特殊原因吗?我们正在使用一些内部构建的数据网格,我们称之为超级网格,这是一种非常基本的数据网格,我们主要使用基础设施网格,但任何性能关键和高容量的网格,我们都使用内部精简网格,它还用于显示多维数据集数据,我指的是excel中的数据透视表。因此,任何先进的网格排序功能都是不可能实现的不幸的是,也就是说,基础设施功能非常强大,但我还没有找到一种方法来实现这一点,即使我在使用他们的网格…至于行状态,我不确定我们在一些应用程序中使用它的目的是什么,我可能不需要DataRowState,但如果我的视图基于DataView而不是一个表,这将是一件好事,因为它增加了灵活性。如果我将来需要它,我不仅可以得到它,而且如果我想使用它,我还可以免费得到过滤。不管怎么说,这似乎并不是那么简单,毕竟,我可能最终只是将我的视图建立在一个数据表上,以保持它的简单。。。