2011-01-27 45 views
0

同时过滤DataGrid中的现有数据,更重要的是有效的:过滤一个DataGrid - 有效的方式

- filtering the existing data collection OR 
- querying database with filter clauses 
+1

这取决于有多少数据,如何接近的数据(同机器,相同的LAN网段,相同的广域网,世界上其他地方的十几跳),并且将过滤器拉*更多*数据而不是更少。 – Lazarus 2011-01-27 17:36:42

回答

1

好的,所以你已经从数据库中提取了一部分数据,并将它呈现给用户。世界上一切都很美好。现在讨厌的用户想要对数据进行进一步的过滤。假设我们没有通过游标等访问海量数据集,那么数据已经存在于内存中。我很想在那里过滤它们。

如果数据没有快速变化,并且某种程度过时的可能性是可以接受的,那么没有充分的理由回到数据库来提取您已有的子集。你已经通过电线将数据提取了一次,为什么又这样做。

如果数据确实需要更新,然后忘记我刚刚说过的所有内容并去问问数据库。

这个想法可能是在你的数据访问层编组的地方。在这里,您将监控数据时代,并确保即使用户只是将相同数据集的过滤更改为数小时,也会定期从数据库中刷新。过滤数据的请求也应该呈现给这个层,这样,你的应用程序就不知道它是实际提取还是仅仅从内存提供。如果您决定一种或另一种方法(内存或数据库)实际上总是更好,您可以更改底层代码并保持您的应用不变,那么这种关注的分离将使您继续前进。

1

在一般情况下,数据库的过滤更有效,因为数据库不仅具有较少的数据返回,但通常它的交易数据也较少(例如,它可以使用索引来减少要处理的记录数量)。此外,在大多数基础设施中,数据库与客户端不在同一台服务器上,因此还有其他资源涉及返回未过滤的数据。通常,需要处理的数据越多,数据库上的筛选就越有效。

但也可以清楚地看出,在代码/客户端过滤更有效的情况下,大多数情况下,如果应用程序掌握了数据库首先必须查询的信息。

但是,这一切都非常模糊,最终它依赖于您的应用程序。如果你说你有一个数据网格,并且用户对有关相同静态数据的过滤器进行了许多更改,那么对数据库进行过滤将导致数据库服务器上出现大量不必要的流量和工作量,而客户端上未过滤的高速缓存数据会提高效率。

0

绝对过滤现有的数据收集。

有几种解决方案,以过滤现有DataGridCollection,但在我看来,最好的解决方案是仅使用与标准WPF DataGrid控制风格,同时发明了一种新的继承DataGird型或根据其他第三方控制的人。以下是我找到了最好的解决方案: