WPF Datagrid: Lazy Loading / Inifinite scroll - PullRequest
       23

WPF Datagrid: Lazy Loading / Inifinite scroll

9 голосов
/ 28 сентября 2011

Я заполняю Datagrid 250 строками.Когда пользователь прокручивает вниз с помощью полосы прокрутки (например, ниже 75%), я хочу получить следующие 250 строк из базы данных и так далее.Идея состоит в том, что сетка может иметь миллионы результатов, и мы не хотим загружать их все, пока пользователь не запросит их.Есть ли существующий механизм для этого?

РЕДАКТИРОВАТЬ: Потому что, кажется, много путаницы: я не ищу стандартные решения для виртуализации данных, я уже использую их .Но все они требуют, чтобы вы указали количество «виртуальных строк» ​​заранее, и этот запрос для меня дорог.Причина, по которой они этого требуют, заключается в том, что это позволяет намного легче вычислить текущую страницу / смещение / и т. Д., Когда вы знаете общее количество элементов в сетке.Но это очень дорогой sql-запрос для вычисления этой суммы, поэтому я хочу перейти на другое решение, где я могу пропустить запрос COUNT ().

Ответы [ 2 ]

1 голос
/ 28 сентября 2011

Похоже, что свойство виртуализации DataGrid вам не поможет, потому что для этого требуется полный набор данных в ItemsSource.

Таким образом, для обеспечения отложенной загрузки данных (см. Статью Виртуализация данных ) Вы можете обработать событие ScrollViewer.ScrollChanged и применить классический подход к подкачке страниц на стороне сервера. По сути, вы должны определить и рассчитать такие значения, как Page Size, Page Number, Sort Order, чтобы вы могли запросить из базы данных требуемый набор данных и отобразить его в пользовательском интерфейсе. Каждый раз, когда Current Page Number или Sort Order меняется, вам нужно запросить данные и обновить ItemsSource сетки, возможно, вам также необходимо восстановить положение прокрутки, но я не уверен в этом.

  • Рассчитать количество видимых предметов
  • Выполнение запроса данных в базу данных для параметризованного запроса с такими параметрами, как PageNumber, PagiSize
  • Обновление DataGrid ItemsSource только что загруженными элементами данных

Я полагаю, что основной задачей было бы вычислить значение размера страницы, номера текущей страницы. Я считаю, что режим Logical Scrolling поможет вам в этом.

0 голосов
/ 28 сентября 2011

Установить свойство EnableRowVirtualization DataGrid на true

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

...