Добрый день. Изучаю сейчас ADO.NET. Концепцию работы понял, но возник один вопрос:
Что делать если, например, таблица клиентов состоит из 100 000 записей и мне её нужно отобразить в гриде? Тянуть все записи как-то некрасиво. Есть ли возможность при скроллинге делать подзапросы к БД? Буду очень рад если кините в меня маленьким примером или статейкой где про это можно почитать.
Знаю что сейчас мне будут говорить про использование фильтров — это конечно хорошо и делать я это буду, но предусмотреть возможность "догрузки" данных из БД при скроллинге тоже бы хотелось реализовать, т.к. пользователи привыкли к такому функционалу по другим приложениям.
Пэйджинг(1 2 3 4) — на мой взгляд в WinForms как-то несмотрится.
Здравствуйте, __scorp__, Вы писали:
___>Добрый день. Изучаю сейчас ADO.NET. Концепцию работы понял, но возник один вопрос: ___>Что делать если, например, таблица клиентов состоит из 100 000 записей и мне её нужно отобразить в гриде? Тянуть все записи как-то некрасиво. Есть ли возможность при скроллинге делать подзапросы к БД?
Технически этого можно добиться, но вы хорошо представляете себе скроллинг с таким кол-вом записей, да еще и с множественными обращениями к БД при скроллировании несколькими разными пользователями? В принципе, нагрузку можно балансировать, например, отправляя асинхронные запросы к БД не в момент скроллирования, а в момент когда пользователь прекратил скроллирование (чуть приостановился)...
Но есть еще факторы: если пользователь сдвинет мышкой скроллбар на один пиксель, то он перепрыгнет через 100 записей! Думаете, что он будет счастлив от этого факта, если в гриде одновременно отображается меньше 50-ти записей?
Можно, конечно организовать свой "мягкий" скроллинг, например, как у Picasa2... Но это уже будет далеко не самым простым решением, особенно, если речь идет о Web.
Здравствуйте, samius, Вы писали:
S>Но есть еще факторы: если пользователь сдвинет мышкой скроллбар на один пиксель, то он перепрыгнет через 100 записей! Думаете, что он будет счастлив от этого факта, если в гриде одновременно отображается меньше 50-ти записей? S>Можно, конечно организовать свой "мягкий" скроллинг, например, как у Picasa2... Но это уже будет далеко не самым простым решением, особенно, если речь идет о Web.
Речь о WinForms, но как я понял решение в любом случае будет технически сложным. Понял, спасибо. Т. е. все решают эту проблему только фильтрами? Но ведь пользователь может наложить фильтр который все равно вернет большую выборку. Что тогда? Грузить все? Еще раз повторюсь, что пэйджинг в WinForms не смотрится, да и большинство приложений все таки предоставляют возможность просмотра всех данных в одном гриде (1С, MS Dynamics AX, Nav) и пользователи к этому привыкли и считают это логичным.
Здравствуйте, __scorp__, Вы писали:
___>Речь о WinForms, но как я понял решение в любом случае будет технически сложным. Понял, спасибо. Т. е. все решают эту проблему только фильтрами? Но ведь пользователь может наложить фильтр который все равно вернет большую выборку. Что тогда? Грузить все? Еще раз повторюсь, что пэйджинг в WinForms не смотрится, да и большинство приложений все таки предоставляют возможность просмотра всех данных в одном гриде (1С, MS Dynamics AX, Nav) и пользователи к этому привыкли и считают это логичным.
Вы пейджингом называете циферки с номерами страниц? Сделайте без циферок. Все равно это будет пейджинг.
Здравствуйте, __scorp__, Вы писали:
___>Речь о WinForms, но как я понял решение в любом случае будет технически сложным. Понял, спасибо. Т. е. все решают эту проблему только фильтрами? Но ведь пользователь может наложить фильтр который все равно вернет большую выборку. Что тогда?
Тогда выводим первые n записей (n достаточно порядка 1000) и предупреждение о том, что показаны не все результаты.
... << RSDN@Home 1.2.0 alpha 4 rev. 1111 on Windows Vista 6.0.6001.65536>>
Здравствуйте, __scorp__, Вы писали:
___>Что делать если, например, таблица клиентов состоит из 100 000 записей и мне её нужно отобразить в гриде? Тянуть все записи как-то некрасиво. Есть ли возможность при скроллинге делать подзапросы к БД?
загружать 100000 пустых объектов с только id, и отложенную загрузку каждого объекта при первом обращении к свойству
Данное сообщение является художественным произведением и освещает вымышленные события в вымышленном мире. Все совпадения с реальностью являются случайными. Не является инвестиционной рекомендацией.
Здравствуйте, Осака Вестингауз, Вы писали:
ОВ>загружать 100000 пустых объектов с только id, и отложенную загрузку каждого объекта при первом обращении к свойству
Подумали, что будет, если юзер надавит PageDown, или потянет скроллинг мышкой, при условии что на гриде может поместиться около 50-ти записей?
Здравствуйте, __scorp__, Вы писали:
___>Добрый день. Изучаю сейчас ADO.NET. Концепцию работы понял, но возник один вопрос: ___>Что делать если, например, таблица клиентов состоит из 100 000 записей и мне её нужно отобразить в гриде? Тянуть все записи как-то некрасиво. Есть ли возможность при скроллинге делать подзапросы к БД? Буду очень рад если кините в меня маленьким примером или статейкой где про это можно почитать. ___>Знаю что сейчас мне будут говорить про использование фильтров — это конечно хорошо и делать я это буду, но предусмотреть возможность "догрузки" данных из БД при скроллинге тоже бы хотелось реализовать, т.к. пользователи привыкли к такому функционалу по другим приложениям. ___>Пэйджинг(1 2 3 4) — на мой взгляд в WinForms как-то несмотрится.
У DevExpress-овского Grid-а есть ServerMode. Который делает именно то, о чем ты пишешь — подгружает данные по мере необходимости. Возможно в других коммерческих компонентах есть что-либо аналогичное, но в стандартной поставке Windows Forms этого нет.
Здравствуйте, SergeyT., Вы писали:
ST> Возможно в других коммерческих компонентах есть что-либо аналогичное, но в стандартной поставке Windows Forms этого нет.
В стандартной поставке у DataGridView точно так же есть виртуальный режим.
... << RSDN@Home 1.2.0 alpha 4 rev. 1111 on Windows Vista 6.0.6001.65536>>
Здравствуйте, 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.
Здравствуйте, samius, Вы писали:
S>Здравствуйте, Осака Вестингауз, Вы писали:
ОВ>>загружать 100000 пустых объектов с только id, и отложенную загрузку каждого объекта при первом обращении к свойству
S>Подумали, что будет, если юзер надавит PageDown, или потянет скроллинг мышкой, при условии что на гриде может поместиться около 50-ти записей?
Мысль о загрузке около 50-ти записей привела вас в ужас?
Данное сообщение является художественным произведением и освещает вымышленные события в вымышленном мире. Все совпадения с реальностью являются случайными. Не является инвестиционной рекомендацией.
Здравствуйте, Осака Вестингауз, Вы писали:
ОВ>Здравствуйте, samius, Вы писали:
S>>Здравствуйте, Осака Вестингауз, Вы писали:
ОВ>>>загружать 100000 пустых объектов с только id, и отложенную загрузку каждого объекта при первом обращении к свойству
S>>Подумали, что будет, если юзер надавит PageDown, или потянет скроллинг мышкой, при условии что на гриде может поместиться около 50-ти записей?
ОВ>Мысль о загрузке около 50-ти записей привела вас в ужас?
Нет, меня привела в ужас мысль о 50-ти загрузках по одной записи.
Если бы мысль была выражена так, что можно было бы понять о загрузке диапазона записей [i-50, i+50] при обращении к свойству i-ой не загруженной записи, то я бы не так ужаснулся.
Кроме того меня немного пугает необходимость хранения в памяти кэша на 100000 записей, когда можно обойтись без этого.
Здравствуйте, AndrewVK, Вы писали:
AVK>Здравствуйте, SergeyT., Вы писали:
AVK>И? Что из всего этого не умеет DataGridView в виртуальном режиме?
Почитал про VirtualMode. Согласен, это тоже самое, но с несколько иной реализацией. В девекспресе для этого нужен особый источник данных, а в DataGridView — обработка необходимых событий.