Модераторы: gambit, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> DataGridView Virtual Mode Скроллер 
V
    Опции темы
N1ko
Дата 30.4.2010, 09:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 383
Регистрация: 30.12.2007
Где: Киев

Репутация: нет
Всего: нет



Здравствуйте. Реализовал Virtual Mode у DataGridView только для отображения данных. Редактировать их пользователь не может. Вот код

 
Код

private void FrmDataGridViewResult_CellValueNeeded(object sender, DataGridViewCellValueEventArgs e)
        {
            e.Value = dtResTable.Rows[e.RowIndex][e.ColumnIndex];
        }

        private void FrmDataGridViewResult_Scroll(object sender, ScrollEventArgs e)
        {
            if (e.ScrollOrientation == ScrollOrientation.VerticalScroll && FrmDataGridViewResult.Rows.Count < dtResTable.Rows.Count)
            {
                FrmDataGridViewResult.Rows.Add();
            }
        }


Результаты нормально отрисовуются, всё отлично заполняется. Всёбы хорошо, но наступает момент, когда опускаешь скроллер в самый низ, он уменьшается в размер до минимума и прога зависает. Судя по всему когда я опускаю его  всамый низ, начинают добавляться строки беспрерывно. Можно ли это кк то исправить?
PM MAIL ICQ   Вверх
mrbrooks
Дата 30.4.2010, 10:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 2
Всего: 306



Вы поступаете идеологически не верно. Сами посудите - зачем нужно загружать пользователю результат сразу (к примеру) 1000 строк. Визуально он увидит только штук 50 плюс-минус n - в зависимости от рабочего пространства.

На помощь нам приходит парадигма "Model-View". В конкретном случае Вам нужно реализовать т.н. "Paiging" - то есть разбивка результата  постранично, с n-ым количеством строк на странице.

Посмотрите примеры в google. Их там масса smile 
PM MAIL   Вверх
N1ko
Дата 30.4.2010, 10:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 383
Регистрация: 30.12.2007
Где: Киев

Репутация: нет
Всего: нет



Так ведь загружается изначально строк 50, как Вы и сказали. Я ни в коем случае сразу не загружаю все строки.Если пользователю вздумалось посмотреть остальные результаты, он двигает скролл вниз, чем и вызывается событие на отрисовку новых ячеек по мере опускания скроллера. То есть строки добавляются постепенно, что и предполагает VirtualMode.

Это сообщение отредактировал(а) N1ko - 30.4.2010, 10:40
PM MAIL ICQ   Вверх
mrbrooks
Дата 30.4.2010, 10:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 2
Всего: 306



ок - все понятно. в свое время я просто сталкивался с аналогичным вопросом и решил реализовать именно paiging - это конечно несколько сложнее реализовать - чем VirtualMode - но навигация по страницам мне показалась кошернее . Если не решите свою проблему - вспомните про мой совет. 

Гуд лак  smile 
PM MAIL   Вверх
N1ko
Дата 30.4.2010, 10:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 383
Регистрация: 30.12.2007
Где: Киев

Репутация: нет
Всего: нет



Ок. Спасибо. Как раз сейчас рассматриваю Ваш совет как альтернативу моему варианту.  smile 
PM MAIL ICQ   Вверх
Sed0Y
Дата 30.4.2010, 15:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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

PM MAIL ICQ   Вверх
N1ko
Дата 6.5.2010, 12:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 383
Регистрация: 30.12.2007
Где: Киев

Репутация: нет
Всего: нет



Судя по всему единственным решением данной проблемы является установка свойства DataGridView.RowCount = n (n - максимальнное количество строк ) вместе с использованием VirualMode. Но не в том случае когда количество строк допустим равно 100000 и 40 колонок как у меня, тогда это воообще не решает проблему. Требуется слишком много времени что бы выполнить DataGridView.RowCount = n. Соответственно в даннном случае использование VirtualMode неприменимо и единственный вариант - использование Paging, как и советовал mrbrooks

Это сообщение отредактировал(а) N1ko - 6.5.2010, 12:29
PM MAIL ICQ   Вверх
mrbrooks
Дата 6.5.2010, 13:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 2
Всего: 306



Цитата(N1ko @  6.5.2010,  13:27 Найти цитируемый пост)
Соответственно в даннном случае использование VirtualMode неприменимо и единственный вариант - использование Paging, как и советовал mrbrooks

 smile 
Проверено временем камрад.
PM MAIL   Вверх
N1ko
Дата 6.5.2010, 17:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 383
Регистрация: 30.12.2007
Где: Киев

Репутация: нет
Всего: нет



А я хотел бы немного уточнить. Paging паттерн аналогичен Iterator(Cursor) паттерну? В инетеренете на Paging очень мало инфы. Всё что тя нашёл по этиому поводу и сопоставил с Iterator вро де бы сошлось. Если всё же это разные вещи, дайте плз ссылку на ресурс с PAging Pattern

Это сообщение отредактировал(а) N1ko - 6.5.2010, 17:36
PM MAIL ICQ   Вверх
mrbrooks
Дата 6.5.2010, 18:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 2
Всего: 306



N1ko, это не паттерн. Это, скажем так, трюк.

Вот что это из себя предстовляет:
пример 1
пример 2

Цитата(N1ko @  6.5.2010,  18:31 Найти цитируемый пост)
В инетеренете на Paging очень мало инфы. Всё что тя нашёл по этиому поводу и сопоставил с Iterator вро де бы сошлось. Если всё же это разные вещи, дайте плз ссылку на ресурс с PAging Pattern

ищите так и не пожалеете - paging datagridview  smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка Windows Forms | Следующая тема »


 




[ Время генерации скрипта: 0.1031 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.