Задать вопрос
@stcmd04236

Как можно загрузить данные в DataGridView по мере скроллинга?

Добрый день! Есть данные около 50000 строк которого надо отображать в datagridview. Если все загрузить то снижается производительность и жрет слишком много памяти. По этому решил загрузить данные по кусочкам. Но вот есть моменты которые не нравится. К примеру загружаю следующий кусок данных когда скролл доходит до конца и при этом удаляю предыдущие данные и вот здесь неприятный момент. Скролл прыгает вверх данные сразу меняется и станет непонятно что где. Может есть какие нибудь красивые решения или где прочитать? Да еще видел в 1с что тоже самое (подобное) делается только у него скролл стоит на середине и доходит до конца когда все данные загружаются. Как можно сделать подобное?
  • Вопрос задан
  • 613 просмотров
Подписаться 2 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 2
DmitryITWorksMakarov
@DmitryITWorksMakarov
Виртуальный режим DataGridView вам в помощь.
А вообще вот зачем пользователю в интерфейсе 50к строк. Все равно ему столько не нужно. А накладных расходов куча: память, обращения к диску, обмен по сети (если данные берутся из удаленной базы).
Показывайте пользователю только то, что ему нужно в данный момент или используйте пагинацию.
Ответ написан
@Serjio-Grig
Тот самый никто (=
stcmd04236: Вы можете просто создать страницу, например, mytable.xaml. В mytable.xaml.cs принимаете параметр с номером страницы из фрейма:
void NavigationService_LoadCompleted(object sender, NavigationEventArgs e)
{
    int page = (int) e.ExtraData;
}

Там же начинаете выборку из БД, например для MySQL код бы выглядел так:
MySqlCommand cmd = (твоя переменная с соединением).CreateCommand();
cmd.CommandText = "SELECT * FROM table ORDER BY id ASC LIMIT 10,@pagenum";
int pagenum = page*10-1;
cmd.Parameters.AddWithValue("@pagenum",pagenum);
MySqlDataReader  result = cmd.ExecuteReader();
while(result.Read()){
// Добавляем строки в таблицу. С ними работаем по типу result.ColumnName, result.ColumnInfo и т.д.
}
// int page - номер страницы из примера приема параметра, передаваемого фреймом.
// int pagenum - умножаем номер страницы на 10 и смещаем ID на 1 к началу.


Использовать подгрузку (append контента при скроллинге) нецелесообразно, особенно если придется потом листать наверх. Сам я новичок, поэтому пример может быть груб и неотесан.)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы