Отображение большой коллекции в DataGrid - PullRequest
0 голосов
/ 09 августа 2010

Количество предметов в коллекции: ~ 100к Количество полей отображается в столбцах: 4-10

Сама проблема - коллекция берется из базы данных с использованием EntityFramework. Для разработки и материализации всех необходимых данных требуется около 10-12 секунд на компьютерах разработчиков. Еще одна вещь, которая возникает, заключается в том, что одну и ту же коллекцию можно привязать к нескольким элементам управления, и, следовательно, они должны фильтроваться отдельно (= не устанавливая фильтры представления коллекции по умолчанию). В настоящее время я установил привязку следующим образом:

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

Создание нового CollectionViewSource значительно увеличивает время, необходимое для инициализации - несколько минут (и я подозреваю, что по какой-то причине он перечисляет коллекцию 100 КБ). Я имею в виду, что если я просто установлю:

b.Source = MyLargeCollection;

Это займет всего 10-12 секунд, чтобы загрузить и материализовать данные из базы данных.

Вопрос - есть ли проблемы с моим кодом? Если нет - какой будет правильный подход для привязки одной и той же большой коллекции к различным элементам управления элементами, но с разными представлениями коллекции?

1 Ответ

1 голос
/ 09 августа 2010

Просто используйте 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();

Таким образом, вы загружаете только записи, необходимые для ваших элементов управления

...