скроллинг в Grid
От: __scorp__  
Дата: 06.10.08 10:29
Оценка:
Добрый день. Изучаю сейчас ADO.NET. Концепцию работы понял, но возник один вопрос:
Что делать если, например, таблица клиентов состоит из 100 000 записей и мне её нужно отобразить в гриде? Тянуть все записи как-то некрасиво. Есть ли возможность при скроллинге делать подзапросы к БД? Буду очень рад если кините в меня маленьким примером или статейкой где про это можно почитать.
Знаю что сейчас мне будут говорить про использование фильтров — это конечно хорошо и делать я это буду, но предусмотреть возможность "догрузки" данных из БД при скроллинге тоже бы хотелось реализовать, т.к. пользователи привыкли к такому функционалу по другим приложениям.
Пэйджинг(1 2 3 4) — на мой взгляд в WinForms как-то несмотрится.
Re: скроллинг в Grid
От: samius Япония http://sams-tricks.blogspot.com
Дата: 06.10.08 11:31
Оценка: 1 (1)
Здравствуйте, __scorp__, Вы писали:

___>Добрый день. Изучаю сейчас ADO.NET. Концепцию работы понял, но возник один вопрос:

___>Что делать если, например, таблица клиентов состоит из 100 000 записей и мне её нужно отобразить в гриде? Тянуть все записи как-то некрасиво. Есть ли возможность при скроллинге делать подзапросы к БД?
Технически этого можно добиться, но вы хорошо представляете себе скроллинг с таким кол-вом записей, да еще и с множественными обращениями к БД при скроллировании несколькими разными пользователями? В принципе, нагрузку можно балансировать, например, отправляя асинхронные запросы к БД не в момент скроллирования, а в момент когда пользователь прекратил скроллирование (чуть приостановился)...

Но есть еще факторы: если пользователь сдвинет мышкой скроллбар на один пиксель, то он перепрыгнет через 100 записей! Думаете, что он будет счастлив от этого факта, если в гриде одновременно отображается меньше 50-ти записей?
Можно, конечно организовать свой "мягкий" скроллинг, например, как у Picasa2... Но это уже будет далеко не самым простым решением, особенно, если речь идет о Web.
Re[2]: скроллинг в Grid
От: __scorp__  
Дата: 06.10.08 11:55
Оценка:
Здравствуйте, samius, Вы писали:

S>Но есть еще факторы: если пользователь сдвинет мышкой скроллбар на один пиксель, то он перепрыгнет через 100 записей! Думаете, что он будет счастлив от этого факта, если в гриде одновременно отображается меньше 50-ти записей?

S>Можно, конечно организовать свой "мягкий" скроллинг, например, как у Picasa2... Но это уже будет далеко не самым простым решением, особенно, если речь идет о Web.

Речь о WinForms, но как я понял решение в любом случае будет технически сложным. Понял, спасибо. Т. е. все решают эту проблему только фильтрами? Но ведь пользователь может наложить фильтр который все равно вернет большую выборку. Что тогда? Грузить все? Еще раз повторюсь, что пэйджинг в WinForms не смотрится, да и большинство приложений все таки предоставляют возможность просмотра всех данных в одном гриде (1С, MS Dynamics AX, Nav) и пользователи к этому привыкли и считают это логичным.
Re[3]: скроллинг в Grid
От: samius Япония http://sams-tricks.blogspot.com
Дата: 06.10.08 12:59
Оценка:
Здравствуйте, __scorp__, Вы писали:

___>Речь о WinForms, но как я понял решение в любом случае будет технически сложным. Понял, спасибо. Т. е. все решают эту проблему только фильтрами? Но ведь пользователь может наложить фильтр который все равно вернет большую выборку. Что тогда? Грузить все? Еще раз повторюсь, что пэйджинг в WinForms не смотрится, да и большинство приложений все таки предоставляют возможность просмотра всех данных в одном гриде (1С, MS Dynamics AX, Nav) и пользователи к этому привыкли и считают это логичным.


Вы пейджингом называете циферки с номерами страниц? Сделайте без циферок. Все равно это будет пейджинг.
Re[3]: скроллинг в Grid
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 06.10.08 14:07
Оценка: 1 (1)
Здравствуйте, __scorp__, Вы писали:

___>Речь о WinForms, но как я понял решение в любом случае будет технически сложным. Понял, спасибо. Т. е. все решают эту проблему только фильтрами? Но ведь пользователь может наложить фильтр который все равно вернет большую выборку. Что тогда?


Тогда выводим первые n записей (n достаточно порядка 1000) и предупреждение о том, что показаны не все результаты.
... << RSDN@Home 1.2.0 alpha 4 rev. 1111 on Windows Vista 6.0.6001.65536>>
AVK Blog
Re: скроллинг в Grid
От: Осака Вестингауз  
Дата: 07.10.08 05:00
Оценка:
Здравствуйте, __scorp__, Вы писали:

___>Что делать если, например, таблица клиентов состоит из 100 000 записей и мне её нужно отобразить в гриде? Тянуть все записи как-то некрасиво. Есть ли возможность при скроллинге делать подзапросы к БД?


загружать 100000 пустых объектов с только id, и отложенную загрузку каждого объекта при первом обращении к свойству
Данное сообщение является художественным произведением и освещает вымышленные события в вымышленном мире. Все совпадения с реальностью являются случайными. Не является инвестиционной рекомендацией.
Re[2]: скроллинг в Grid
От: samius Япония http://sams-tricks.blogspot.com
Дата: 07.10.08 05:45
Оценка:
Здравствуйте, Осака Вестингауз, Вы писали:

ОВ>загружать 100000 пустых объектов с только id, и отложенную загрузку каждого объекта при первом обращении к свойству


Подумали, что будет, если юзер надавит PageDown, или потянет скроллинг мышкой, при условии что на гриде может поместиться около 50-ти записей?
Re: скроллинг в Grid
От: SergeyT. США http://sergeyteplyakov.blogspot.com/
Дата: 07.10.08 06:32
Оценка:
Здравствуйте, __scorp__, Вы писали:

___>Добрый день. Изучаю сейчас ADO.NET. Концепцию работы понял, но возник один вопрос:

___>Что делать если, например, таблица клиентов состоит из 100 000 записей и мне её нужно отобразить в гриде? Тянуть все записи как-то некрасиво. Есть ли возможность при скроллинге делать подзапросы к БД? Буду очень рад если кините в меня маленьким примером или статейкой где про это можно почитать.
___>Знаю что сейчас мне будут говорить про использование фильтров — это конечно хорошо и делать я это буду, но предусмотреть возможность "догрузки" данных из БД при скроллинге тоже бы хотелось реализовать, т.к. пользователи привыкли к такому функционалу по другим приложениям.
___>Пэйджинг(1 2 3 4) — на мой взгляд в WinForms как-то несмотрится.

У DevExpress-овского Grid-а есть ServerMode. Который делает именно то, о чем ты пишешь — подгружает данные по мере необходимости. Возможно в других коммерческих компонентах есть что-либо аналогичное, но в стандартной поставке Windows Forms этого нет.
Re[2]: скроллинг в Grid
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 07.10.08 08:09
Оценка:
Здравствуйте, SergeyT., Вы писали:

ST> Возможно в других коммерческих компонентах есть что-либо аналогичное, но в стандартной поставке Windows Forms этого нет.


В стандартной поставке у DataGridView точно так же есть виртуальный режим.
... << RSDN@Home 1.2.0 alpha 4 rev. 1111 on Windows Vista 6.0.6001.65536>>
AVK Blog
Re[3]: скроллинг в Grid
От: Аноним  
Дата: 07.10.08 09:37
Оценка:
Здравствуйте, AndrewVK, Вы писали:
AVK>В стандартной поставке у DataGridView точно так же есть виртуальный режим.

Даже если режим виртуальный, то грузить данные из БД всё равно требуется. Другое дело, что сам контрол их не содержит.
Re[4]: скроллинг в Grid
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 07.10.08 09:57
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Даже если режим виртуальный, то грузить данные из БД всё равно требуется.


А в девэкспрессном что, не требуется?
... << RSDN@Home 1.2.0 alpha 4 rev. 1111 on Windows Vista 6.0.6001.65536>>
AVK Blog
Re[5]: скроллинг в Grid
От: SergeyT. США http://sergeyteplyakov.blogspot.com/
Дата: 07.10.08 10:27
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Здравствуйте, <Аноним>, Вы писали:


А>>Даже если режим виртуальный, то грузить данные из БД всё равно требуется.


AVK>А в девэкспрессном что, не требуется?


In server mode, the XtraGrid control efficiently handles large volumes of data. The entire recordset is never loaded into memory simultaneously. Instead, the grid requests data from a data store and displays it on screen in small portions, as required. In server mode, all data-aware operations are performed on the data server side.

Starting from version 7.1, the XtraGrid and GridLookUpEdit controls support a new data binding mode, which is specifically designed to work with large datasets consisting of more than 50,000 records (the particular amount of data depends on your circumstances). This is called server mode. With this mode, even if the grid control is connected to a data store containing one million records, the initial data will be displayed immediately, and subsequent data will be loaded rapidly on scrolling. Loading records in small portions, and performing data-aware operations on the data server side are the key features of server mode that ensure quick access to data, even if the sorting, grouping, filtering and summary features are used.
Re[6]: скроллинг в Grid
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 07.10.08 11:02
Оценка:
Здравствуйте, SergeyT., Вы писали:

И? Что из всего этого не умеет DataGridView в виртуальном режиме?
... << RSDN@Home 1.2.0 alpha 4 rev. 1111 on Windows Vista 6.0.6001.65536>>
AVK Blog
Re[3]: скроллинг в Grid
От: Осака Вестингауз  
Дата: 07.10.08 18:13
Оценка:
Здравствуйте, samius, Вы писали:

S>Здравствуйте, Осака Вестингауз, Вы писали:


ОВ>>загружать 100000 пустых объектов с только id, и отложенную загрузку каждого объекта при первом обращении к свойству


S>Подумали, что будет, если юзер надавит PageDown, или потянет скроллинг мышкой, при условии что на гриде может поместиться около 50-ти записей?


Мысль о загрузке около 50-ти записей привела вас в ужас?
Данное сообщение является художественным произведением и освещает вымышленные события в вымышленном мире. Все совпадения с реальностью являются случайными. Не является инвестиционной рекомендацией.
Re[4]: скроллинг в Grid
От: samius Япония http://sams-tricks.blogspot.com
Дата: 07.10.08 18:23
Оценка:
Здравствуйте, Осака Вестингауз, Вы писали:

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


S>>Здравствуйте, Осака Вестингауз, Вы писали:


ОВ>>>загружать 100000 пустых объектов с только id, и отложенную загрузку каждого объекта при первом обращении к свойству


S>>Подумали, что будет, если юзер надавит PageDown, или потянет скроллинг мышкой, при условии что на гриде может поместиться около 50-ти записей?


ОВ>Мысль о загрузке около 50-ти записей привела вас в ужас?

Нет, меня привела в ужас мысль о 50-ти загрузках по одной записи.

Если бы мысль была выражена так, что можно было бы понять о загрузке диапазона записей [i-50, i+50] при обращении к свойству i-ой не загруженной записи, то я бы не так ужаснулся.

Кроме того меня немного пугает необходимость хранения в памяти кэша на 100000 записей, когда можно обойтись без этого.
Re[7]: скроллинг в Grid
От: SergeyT. США http://sergeyteplyakov.blogspot.com/
Дата: 08.10.08 06:35
Оценка:
Здравствуйте, AndrewVK, Вы писали:

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


AVK>И? Что из всего этого не умеет DataGridView в виртуальном режиме?


Почитал про VirtualMode. Согласен, это тоже самое, но с несколько иной реализацией. В девекспресе для этого нужен особый источник данных, а в DataGridView — обработка необходимых событий.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.