DataGrid
От: Sergey__K  
Дата: 11.09.03 07:43
Оценка:
(WinForm C#) В базе данных около 2 000 000 записей. При подключении к DataGrid очень большое время ожидания при отображении записей если даже они отфильтрованы. В форуме нашёл идею постраничного отображения записей, но не нашел её реализацию. Подскажите фрагмент кода, с помощью которого можно подгружать записи по мере использования полосы прокрутки DataGrid, т.е. когда пользователь прокручивает DataGrid подгружаются новые данные.
Спасибо.

25.12.03 11:53: Перенесено модератором из '.NET' — AVK
Re: DataGrid
От: clon Россия  
Дата: 11.09.03 07:59
Оценка:
Здравствуйте, Sergey__K, Вы писали:

S__>(WinForm C#) В базе данных около 2 000 000 записей. При подключении к DataGrid очень большое время ожидания при отображении записей если даже они отфильтрованы. В форуме нашёл идею постраничного отображения записей, но не нашел её реализацию. Подскажите фрагмент кода, с помощью которого можно подгружать записи по мере использования полосы прокрутки DataGrid, т.е. когда пользователь прокручивает DataGrid подгружаются новые данные.

S__>Спасибо.

Стандартный датагрид так "умно" сделан, что он не поддерживает ту идею которую ты хочешь реализовать. Т.е. он сначала проебегает по всем записям, а потом еще и по тем которые видны.

Для реализации твоей идеи сначал тебе нужно подобрать контрол который поддерживает то, что ты хочешь.
Я остановился на Syncfusion Essential Grid.
Нельзя ничего сказать о глубине лужи, пока не попадешь в нее.
Re[2]: DataGrid
От: K_Sergey Казахстан  
Дата: 11.09.03 08:33
Оценка:
C>Стандартный датагрид так "умно" сделан, что он не поддерживает ту идею которую ты хочешь реализовать. Т.е. он сначала проебегает по всем записям, а потом еще и по тем которые видны.

C>Для реализации твоей идеи сначал тебе нужно подобрать контрол который поддерживает то, что ты хочешь.

C>Я остановился на Syncfusion Essential Grid.

Что это за контрол и где его взять?
Re[3]: DataGrid
От: clon Россия  
Дата: 11.09.03 09:09
Оценка:
Здравствуйте, K_Sergey, Вы писали:

K_S>Что это за контрол и где его взять?


здесь

Плюс к этому необходимо написать свой датасет, который реализует загрузку данных по требованию, о том как это сделлать — это уже обсуждалоссь, просто поищи.
Удачи
... << RSDN@Home 1.1 beta 2 >>
Нельзя ничего сказать о глубине лужи, пока не попадешь в нее.
Re[2]: DataGrid
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 11.09.03 17:00
Оценка:
Здравствуйте, clon, Вы писали:

C>Стандартный датагрид так "умно" сделан, что он не поддерживает ту идею которую ты хочешь реализовать. Т.е. он сначала проебегает по всем записям, а потом еще и по тем которые видны.


Все он поддерживает. Реализуешь IBindingList и вперед. Вопрос в другом — чтобы корректно работали скроллеры нужно заранее знать размер коллекции, а вот откуда ты его будешь брать, непонятно.

А вобще стоит задуматься о показе 2 миллионов записей одновременно — никому это не нужно.
... << RSDN@Home 1.1 beta 2 >>
AVK Blog
Re[3]: DataGrid
От: clon Россия  
Дата: 12.09.03 03:13
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Здравствуйте, clon, Вы писали:


C>>Стандартный датагрид так "умно" сделан, что он не поддерживает ту идею которую ты хочешь реализовать. Т.е. он сначала проебегает по всем записям, а потом еще и по тем которые видны.


AVK>Все он поддерживает. Реализуешь IBindingList и вперед.

Здесь речь идет о поддержке грида загрузке данных по требованию, т.е. если видно только первые 50 записей, то только их он и должен запрашивать, аля режим виртуального списка для ListCtrl. см. ниже

AVK>Вопрос в другом — чтобы корректно работали скроллеры нужно заранее знать размер коллекции, а вот откуда ты его будешь брать, непонятно.

Это не проблема. Получаешь количество записей отдельным запросом и пусть Count возвращает это количество. А идея как я понимаю состояла в том, чтобы загружать данные по требованию. А для DataGrid — эта идея бесполезна, т.к. если Count возвратит 2 миллиона, то грид зачем то с самого начала пытается получить каждуюю запись из этих 2 миллионов...

AVK>А вобще стоит задуматься о показе 2 миллионов записей одновременно — никому это не нужно.

Это другой вопрос...
... << RSDN@Home 1.1 beta 2 >>
Нельзя ничего сказать о глубине лужи, пока не попадешь в нее.
Re[4]: DataGrid
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 12.09.03 08:44
Оценка:
Здравствуйте, clon, Вы писали:

AVK>>Все он поддерживает. Реализуешь IBindingList и вперед.

C>Здесь речь идет о поддержке грида загрузке данных по требованию, т.е. если видно только первые 50 записей, то только их он и должен запрашивать, аля режим виртуального списка для ListCtrl. см. ниже

Я прекрасно понял о чем идет речь. Вот как раз самомтоятельная реализация IBindingList (или IList, если редактирование не нужно) позволит сделать любую схему подкачки данных абсолютно прозрачно для контролов.

AVK>>Вопрос в другом — чтобы корректно работали скроллеры нужно заранее знать размер коллекции, а вот откуда ты его будешь брать, непонятно.

C>Это не проблема. Получаешь количество записей отдельным запросом и пусть Count возвращает это количество.

Это очень медленно.

C> А идея как я понимаю состояла в том, чтобы загружать данные по требованию. А для DataGrid — эта идея бесполезна, т.к. если Count возвратит 2 миллиона, то грид зачем то с самого начала пытается получить каждуюю запись из этих 2 миллионов...


Нет. Можешь проэкспериментировать — грид запрашивает у коллекции только те записи, что непосредственно нужны для отображения.
... << RSDN@Home 1.1 beta 2 >>
AVK Blog
Re[5]: DataGrid
От: clon Россия  
Дата: 12.09.03 10:13
Оценка:
Здравствуйте, AndrewVK, Вы писали:

C>> А идея как я понимаю состояла в том, чтобы загружать данные по требованию. А для DataGrid — эта идея бесполезна, т.к. если Count возвратит 2 миллиона, то грид зачем то с самого начала пытается получить каждуюю запись из этих 2 миллионов...


AVK>Нет. Можешь проэкспериментировать — грид запрашивает у коллекции только те записи, что непосредственно нужны для отображения.

Эксперементировал — запрашивает сначал все записи, а потом те которые видны в данный момент, это к сожалению так.
Поэтому пришлось покупать Syncfusion компоненты — они работают "по уму".
... << RSDN@Home 1.1 beta 2 >>
Нельзя ничего сказать о глубине лужи, пока не попадешь в нее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.