在DataGrid中显示大型集合

时间:2010-08-09 09:58:41

标签: wpf data-binding filter large-data-volumes

收集中的物品数量:~100k 列中显示的字段数量:4-10

问题本身 - 使用EntityFramework从数据库中获取集合。在开发计算机上大约需要10-12秒来加载和实现所有需要的数据。另一件事是,同一个集合可以绑定到多个控件,因此,它们必须单独过滤(=不设置默认的集合视图过滤器)。目前,我按如下方式设置绑定:

Binding b = new Binding();
b.Source = new CollectionViewSource() { Source = MyLargeCollection }.View;
MyDataGrid.SetBinding(DataGrid.ItemsSourceProperty, b);

创建一个新的CollectionViewSource会大大增加初始化所需的时间 - 几分钟(我怀疑它是出于某种原因枚举了100k集合)。我的意思是,如果我只是设置:

b.Source = MyLargeCollection;

只需10-12秒即可从数据库中加载和实现数据。

问题 - 我的代码有问题吗?如果不是 - 将相同的大型集合绑定到不同的项目控件但具有不同的集合视图的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

只需使用Linq to Entities加载具有指定过滤器的实体,以确保不加载所有10k记录,因为没有用户对具有10k记录的网格感兴趣。

绑定到查询的示例:

grid1.DataContext = (from i in context.MyItems
                    where i.MyPropertyToFilter == "myFilter"
                    select i).ToList();

grid2.DataContext = (from i in context.MyItems
                    where i.MyOtherPropertyToFilter == "myOhterFilter"
                    select i).ToList();

这样您只需加载控件所需的记录