Вопрос по scroll, datagrid, wpf, database, virtualization – WPF Datagrid: Lazy Loading / Inifinite scroll

9

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

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

возможный дубликатЛенивая загрузка с сеткой данных wpf sll
Вы правы. Но этот вопрос принял «использовать datavirtualization» в качестве ответа. Я уже использую это, так что для меня это не ответ на вопрос, а просто альтернатива. Muis
Вы используете WPF 3.5 или WPF 4? sll
Теперь я понял. Виртуализация может помочь, когда DataContext / ItemsSource уже привязан ко всему набору данных, но вам нужна ленивая загрузка на уровне доступа к данным. sll
@ Джошуа Вы спрашиваете о виртуализации пользовательского интерфейса или виртуализации данных? Если пользовательский интерфейс, ответ ниже правильный. Если данные, ссылка размещена правильно. Rachel

Ваш Ответ

2   ответа
1

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

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

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

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

Вы получили шанс попробовать этот Muis? Shankar Raju
Благодарю. Боюсь, вы правы, что мне придется написать собственную логику для этого. Я действительно надеялся, что существует существующий компонент или пример кода, который я мог бы использовать в качестве основы. Muis
0

EnableRowVirtualization собственность наtrue

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

Похоже, вы не поняли вопрос, виртуализация создает визуальное представление данных только тогда, когда это необходимо, вопрос заключался в том, как извлекать данные только при необходимости, то есть на совершенно другом уровне. H.B.
В настоящее время я использую виртуализацию данных для сетки, но это заставляет меня знать, сколько строк будет в общей сложности, и для некоторых запросов я не хочу вычислять это. Muis
Теперь я понимаю вопрос, так как ваши правки сделали его более понятным :) извините за ввод в заблуждение: / Damascus

Похожие вопросы