(WinForm C#) В базе данных около 2 000 000 записей. При подключении к DataGrid очень большое время ожидания при отображении записей если даже они отфильтрованы. В форуме нашёл идею постраничного отображения записей, но не нашел её реализацию. Подскажите фрагмент кода, с помощью которого можно подгружать записи по мере использования полосы прокрутки DataGrid, т.е. когда пользователь прокручивает DataGrid подгружаются новые данные.
Спасибо.
25.12.03 11:53: Перенесено модератором из '.NET' — AVK
Здравствуйте, Sergey__K, Вы писали:
S__>(WinForm C#) В базе данных около 2 000 000 записей. При подключении к DataGrid очень большое время ожидания при отображении записей если даже они отфильтрованы. В форуме нашёл идею постраничного отображения записей, но не нашел её реализацию. Подскажите фрагмент кода, с помощью которого можно подгружать записи по мере использования полосы прокрутки DataGrid, т.е. когда пользователь прокручивает DataGrid подгружаются новые данные. S__>Спасибо.
Стандартный датагрид так "умно" сделан, что он не поддерживает ту идею которую ты хочешь реализовать. Т.е. он сначала проебегает по всем записям, а потом еще и по тем которые видны.
Для реализации твоей идеи сначал тебе нужно подобрать контрол который поддерживает то, что ты хочешь.
Я остановился на Syncfusion Essential Grid.
Нельзя ничего сказать о глубине лужи, пока не попадешь в нее.
C>Стандартный датагрид так "умно" сделан, что он не поддерживает ту идею которую ты хочешь реализовать. Т.е. он сначала проебегает по всем записям, а потом еще и по тем которые видны.
C>Для реализации твоей идеи сначал тебе нужно подобрать контрол который поддерживает то, что ты хочешь. C>Я остановился на Syncfusion Essential Grid.
Плюс к этому необходимо написать свой датасет, который реализует загрузку данных по требованию, о том как это сделлать — это уже обсуждалоссь, просто поищи.
Удачи
... << RSDN@Home 1.1 beta 2 >>
Нельзя ничего сказать о глубине лужи, пока не попадешь в нее.
Здравствуйте, clon, Вы писали:
C>Стандартный датагрид так "умно" сделан, что он не поддерживает ту идею которую ты хочешь реализовать. Т.е. он сначала проебегает по всем записям, а потом еще и по тем которые видны.
Все он поддерживает. Реализуешь IBindingList и вперед. Вопрос в другом — чтобы корректно работали скроллеры нужно заранее знать размер коллекции, а вот откуда ты его будешь брать, непонятно.
А вобще стоит задуматься о показе 2 миллионов записей одновременно — никому это не нужно.
Здравствуйте, AndrewVK, Вы писали:
AVK>Здравствуйте, clon, Вы писали:
C>>Стандартный датагрид так "умно" сделан, что он не поддерживает ту идею которую ты хочешь реализовать. Т.е. он сначала проебегает по всем записям, а потом еще и по тем которые видны.
AVK>Все он поддерживает. Реализуешь IBindingList и вперед.
Здесь речь идет о поддержке грида загрузке данных по требованию, т.е. если видно только первые 50 записей, то только их он и должен запрашивать, аля режим виртуального списка для ListCtrl. см. ниже
AVK>Вопрос в другом — чтобы корректно работали скроллеры нужно заранее знать размер коллекции, а вот откуда ты его будешь брать, непонятно.
Это не проблема. Получаешь количество записей отдельным запросом и пусть Count возвращает это количество. А идея как я понимаю состояла в том, чтобы загружать данные по требованию. А для DataGrid — эта идея бесполезна, т.к. если Count возвратит 2 миллиона, то грид зачем то с самого начала пытается получить каждуюю запись из этих 2 миллионов...
AVK>А вобще стоит задуматься о показе 2 миллионов записей одновременно — никому это не нужно.
Это другой вопрос...
... << RSDN@Home 1.1 beta 2 >>
Нельзя ничего сказать о глубине лужи, пока не попадешь в нее.
Здравствуйте, clon, Вы писали:
AVK>>Все он поддерживает. Реализуешь IBindingList и вперед. C>Здесь речь идет о поддержке грида загрузке данных по требованию, т.е. если видно только первые 50 записей, то только их он и должен запрашивать, аля режим виртуального списка для ListCtrl. см. ниже
Я прекрасно понял о чем идет речь. Вот как раз самомтоятельная реализация IBindingList (или IList, если редактирование не нужно) позволит сделать любую схему подкачки данных абсолютно прозрачно для контролов.
AVK>>Вопрос в другом — чтобы корректно работали скроллеры нужно заранее знать размер коллекции, а вот откуда ты его будешь брать, непонятно. C>Это не проблема. Получаешь количество записей отдельным запросом и пусть Count возвращает это количество.
Это очень медленно.
C> А идея как я понимаю состояла в том, чтобы загружать данные по требованию. А для DataGrid — эта идея бесполезна, т.к. если Count возвратит 2 миллиона, то грид зачем то с самого начала пытается получить каждуюю запись из этих 2 миллионов...
Нет. Можешь проэкспериментировать — грид запрашивает у коллекции только те записи, что непосредственно нужны для отображения.
Здравствуйте, AndrewVK, Вы писали:
C>> А идея как я понимаю состояла в том, чтобы загружать данные по требованию. А для DataGrid — эта идея бесполезна, т.к. если Count возвратит 2 миллиона, то грид зачем то с самого начала пытается получить каждуюю запись из этих 2 миллионов...
AVK>Нет. Можешь проэкспериментировать — грид запрашивает у коллекции только те записи, что непосредственно нужны для отображения.
Эксперементировал — запрашивает сначал все записи, а потом те которые видны в данный момент, это к сожалению так.
Поэтому пришлось покупать Syncfusion компоненты — они работают "по уму".
... << RSDN@Home 1.1 beta 2 >>
Нельзя ничего сказать о глубине лужи, пока не попадешь в нее.