![]() |
Модераторы: gambit, Partizan |
![]() ![]() ![]() |
|
N1ko |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 383 Регистрация: 30.12.2007 Где: Киев Репутация: нет Всего: нет |
Здравствуйте. Реализовал Virtual Mode у DataGridView только для отображения данных. Редактировать их пользователь не может. Вот код
Результаты нормально отрисовуются, всё отлично заполняется. Всёбы хорошо, но наступает момент, когда опускаешь скроллер в самый низ, он уменьшается в размер до минимума и прога зависает. Судя по всему когда я опускаю его всамый низ, начинают добавляться строки беспрерывно. Можно ли это кк то исправить? |
|||
|
||||
mrbrooks |
|
|||
![]() трололомен ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4259 Регистрация: 4.10.2006 Где: Дол Гулдур Репутация: 2 Всего: 306 |
Вы поступаете идеологически не верно. Сами посудите - зачем нужно загружать пользователю результат сразу (к примеру) 1000 строк. Визуально он увидит только штук 50 плюс-минус n - в зависимости от рабочего пространства.
На помощь нам приходит парадигма "Model-View". В конкретном случае Вам нужно реализовать т.н. "Paiging" - то есть разбивка результата постранично, с n-ым количеством строк на странице. Посмотрите примеры в google. Их там масса ![]() |
|||
|
||||
N1ko |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 383 Регистрация: 30.12.2007 Где: Киев Репутация: нет Всего: нет |
Так ведь загружается изначально строк 50, как Вы и сказали. Я ни в коем случае сразу не загружаю все строки.Если пользователю вздумалось посмотреть остальные результаты, он двигает скролл вниз, чем и вызывается событие на отрисовку новых ячеек по мере опускания скроллера. То есть строки добавляются постепенно, что и предполагает VirtualMode.
Это сообщение отредактировал(а) N1ko - 30.4.2010, 10:40 |
|||
|
||||
mrbrooks |
|
|||
![]() трололомен ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4259 Регистрация: 4.10.2006 Где: Дол Гулдур Репутация: 2 Всего: 306 |
ок - все понятно. в свое время я просто сталкивался с аналогичным вопросом и решил реализовать именно paiging - это конечно несколько сложнее реализовать - чем VirtualMode - но навигация по страницам мне показалась кошернее . Если не решите свою проблему - вспомните про мой совет.
Гуд лак ![]() |
|||
|
||||
N1ko |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 383 Регистрация: 30.12.2007 Где: Киев Репутация: нет Всего: нет |
Ок. Спасибо. Как раз сейчас рассматриваю Ваш совет как альтернативу моему варианту.
![]() |
|||
|
||||
Sed0Y |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 48 Регистрация: 16.1.2009 Репутация: нет Всего: нет |
не понятно что у тебя там такое происходит, наверно что-то где-то не так про написал...
вот посмотри примеры: http://msdn.microsoft.com/ru-ru/library/2b...d(v=VS.90).aspx http://msdn.microsoft.com/ru-ru/library/sy...d(v=VS.90).aspx |
|||
|
||||
N1ko |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 383 Регистрация: 30.12.2007 Где: Киев Репутация: нет Всего: нет |
Судя по всему единственным решением данной проблемы является установка свойства DataGridView.RowCount = n (n - максимальнное количество строк ) вместе с использованием VirualMode. Но не в том случае когда количество строк допустим равно 100000 и 40 колонок как у меня, тогда это воообще не решает проблему. Требуется слишком много времени что бы выполнить DataGridView.RowCount = n. Соответственно в даннном случае использование VirtualMode неприменимо и единственный вариант - использование Paging, как и советовал mrbrooks
Это сообщение отредактировал(а) N1ko - 6.5.2010, 12:29 |
|||
|
||||
mrbrooks |
|
|||
![]() трололомен ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4259 Регистрация: 4.10.2006 Где: Дол Гулдур Репутация: 2 Всего: 306 |
||||
|
||||
N1ko |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 383 Регистрация: 30.12.2007 Где: Киев Репутация: нет Всего: нет |
А я хотел бы немного уточнить. Paging паттерн аналогичен Iterator(Cursor) паттерну? В инетеренете на Paging очень мало инфы. Всё что тя нашёл по этиому поводу и сопоставил с Iterator вро де бы сошлось. Если всё же это разные вещи, дайте плз ссылку на ресурс с PAging Pattern
Это сообщение отредактировал(а) N1ko - 6.5.2010, 17:36 |
|||
|
||||
mrbrooks |
|
|||
![]() трололомен ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4259 Регистрация: 4.10.2006 Где: Дол Гулдур Репутация: 2 Всего: 306 |
N1ko, это не паттерн. Это, скажем так, трюк.
Вот что это из себя предстовляет: пример 1 пример 2 ищите так и не пожалеете - paging datagridview ![]() |
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Разработка Windows Forms | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |