Сетка данных WPF, заполняющая ячейки по мере их появления

#wpf #datagrid

#wpf #сетка данных

Вопрос:

Я всегда использовал виртуальную сетку Syncfusion, которая работает на основе переопределения в этой сетке, которое запускается для каждой видимой ячейки! Она предоставляет мне информацию о строке и столбце и некотором объекте cell, который позволяет мне устанавливать значение этой ячейки, ее форматирование, цвета и т.д.

Это позволило выполнять очень быструю прокрутку на очень больших наборах данных, поскольку мне просто нужно «считывать» значение, подобное DataSet.Таблицы [0].Строки[1000000][«Фамилия»].toString()

Есть ли что-нибудь подобное, предоставляемое сеткой данных WPF?

РЕДАКТИРОВАТЬ Мне нужно внести ясность — я знаю о виртуализации и о том, что она отключается, когда вы выполняете группировку и т.д. Запуск теста с включенной группировкой по набору данных из 20 000
строк заставил мою сетку захлебнуться. Поэтому мой предыдущий вопрос стоит сам по себе! Есть ли какой-либо способ, которым сетка позволяет мне заполнять текст и выполнять некоторое форматирование с помощью переопределения или обратного вызова?

Спасибо

Ответ №1:

Сетка данных использует виртуализацию по умолчанию. Это работает либо путем создания и удаления ячеек «на лету», либо путем повторного использования видимых ячеек и повторного заполнения их данными текущей строки. Это можно отключить, а также настроить, поиграв со свойством VirtualizingStackPanel.VirtualizationMode, и оно принудительно отключается во многих ситуациях (группировка — хороший пример). Эта виртуализация может быть как находкой, так и проклятием. Если у вас простой набор требований, то это значительно упрощает получение хорошей производительности. Если, с другой стороны, вы выполняете сложную привязку во время выполнения, включая триггеры и пользовательские столбцы, тогда это становится чем-то вроде кошмара.

несколько важных операций чтения:

http://msdn.microsoft.com/en-us/library/cc716879.aspx

http://msdn.microsoft.com/en-us/library/system.windows.controls.virtualizingstackpanel.aspx

Комментарии:

1. Спасибо за быстрый ответ, но это не то, что я имел в виду — я отредактировал свой вопрос выше. Я полагаю, я знаю, что ответ будет — Нет, его нет — что будет разочаровывающим, но тогда мне просто придется принять тот факт, что сетки данных с большим количеством данных по своей сути медленные — ДАЖЕ при включенной виртуализации (по умолчанию)!

2. @Marcel, я думаю, тогда ты задал неправильный вопрос, потому что «считывание значения x [100000].name.tostring()» — это именно то, что делает переработанная виртуализация. Если вам требуется виртуализация сгруппированных данных, то сетка данных вряд ли вам поможет. Если, с другой стороны, это скорость доступа к x [100000] сама по себе, то это может быть проблемой виртуализации данных. Вот интересный PDF-файл на эту тему: bea.stollnitz.com/files/52/DataVirtualization.pdf

3. еще раз спасибо за это ach — при перетаскивании вертикальной полосы прокрутки все еще возникает задержка, когда у меня > 25 000 строк в виртуальной сетке данных. Теперь многое, но мой босс раздражен тем, что это не соответствует скорости Excel, которая может отлично обрабатывать более миллиона строк и прокручивать!

4. Вы установили режим виртуализации на переработку? Это намного быстрее, чем стандартная виртуализация. Также существует другая настройка, называемая ‘ScrollViewer. IsDeferredScrollingEnabled’, что также повысило бы видимую производительность, обновляя видимые ячейки только по завершении прокрутки.