| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Разработка Windows Forms > DataGridView Virtual Mode Скроллер |
| Автор: N1ko 30.4.2010, 09:26 | ||
Здравствуйте. Реализовал Virtual Mode у DataGridView только для отображения данных. Редактировать их пользователь не может. Вот код
Результаты нормально отрисовуются, всё отлично заполняется. Всёбы хорошо, но наступает момент, когда опускаешь скроллер в самый низ, он уменьшается в размер до минимума и прога зависает. Судя по всему когда я опускаю его всамый низ, начинают добавляться строки беспрерывно. Можно ли это кк то исправить? |
| Автор: mrbrooks 30.4.2010, 10:34 |
| Вы поступаете идеологически не верно. Сами посудите - зачем нужно загружать пользователю результат сразу (к примеру) 1000 строк. Визуально он увидит только штук 50 плюс-минус n - в зависимости от рабочего пространства. На помощь нам приходит парадигма "Model-View". В конкретном случае Вам нужно реализовать т.н. "Paiging" - то есть разбивка результата постранично, с n-ым количеством строк на странице. Посмотрите примеры в google. Их там масса |
| Автор: N1ko 30.4.2010, 10:40 |
| Так ведь загружается изначально строк 50, как Вы и сказали. Я ни в коем случае сразу не загружаю все строки.Если пользователю вздумалось посмотреть остальные результаты, он двигает скролл вниз, чем и вызывается событие на отрисовку новых ячеек по мере опускания скроллера. То есть строки добавляются постепенно, что и предполагает VirtualMode. |
| Автор: mrbrooks 30.4.2010, 10:54 |
| ок - все понятно. в свое время я просто сталкивался с аналогичным вопросом и решил реализовать именно paiging - это конечно несколько сложнее реализовать - чем VirtualMode - но навигация по страницам мне показалась кошернее . Если не решите свою проблему - вспомните про мой совет. Гуд лак |
| Автор: N1ko 30.4.2010, 10:57 |
| Ок. Спасибо. Как раз сейчас рассматриваю Ваш совет как альтернативу моему варианту. |
| Автор: Sed0Y 30.4.2010, 15:43 |
| не понятно что у тебя там такое происходит, наверно что-то где-то не так про написал... вот посмотри примеры: http://msdn.microsoft.com/ru-ru/library/2b177d6d(v=VS.90).aspx http://msdn.microsoft.com/ru-ru/library/system.windows.forms.datagridview.cellvalueneeded(v=VS.90).aspx |
| Автор: N1ko 6.5.2010, 12:27 |
| Судя по всему единственным решением данной проблемы является установка свойства DataGridView.RowCount = n (n - максимальнное количество строк ) вместе с использованием VirualMode. Но не в том случае когда количество строк допустим равно 100000 и 40 колонок как у меня, тогда это воообще не решает проблему. Требуется слишком много времени что бы выполнить DataGridView.RowCount = n. Соответственно в даннном случае использование VirtualMode неприменимо и единственный вариант - использование Paging, как и советовал mrbrooks |
| Автор: N1ko 6.5.2010, 17:31 |
| А я хотел бы немного уточнить. Paging паттерн аналогичен Iterator(Cursor) паттерну? В инетеренете на Paging очень мало инфы. Всё что тя нашёл по этиому поводу и сопоставил с Iterator вро де бы сошлось. Если всё же это разные вещи, дайте плз ссылку на ресурс с PAging Pattern |
| Автор: mrbrooks 6.5.2010, 18:31 | ||
| N1ko, это не паттерн. Это, скажем так, трюк. Вот что это из себя предстовляет: http://www.codeproject.com/KB/grid/DataGridPaging.aspx http://www.codeproject.com/KB/miscctrl/Pagable_DatagridView.aspx
ищите так и не пожалеете - http://www.google.ru/search?hl=ru&newwindow=1&client=firefox&hs=FGO&rls=ru.yandex%3Aru%3Aofficial&q=paging+datagridview&btnG=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA&aq=f&aqi=&aql=&oq=&gs_rfai= |