У меня есть форма окна, которая имеет два DataGridView (DGV), которые будут содержать более 25 000 записей и 21 столбец каждый. Я успешно загрузил каждый с данными из БД, используя DataAdapter, а затем я попытался просто заполнить DGV, используя для циклов. Каждый метод занимал примерно одинаковое количество времени. В первый раз, когда данные заполняются в DGV, это занимает слишком много времени (7+ минут), а затем последующие моменты времени становятся гораздо более разумными (~ 30 секунд). Поэтому мой вопрос: как лучше всего загрузить DGV большим объемом данных, который в среднем займет <= 1 мин? Мне действительно нравится функциональность DGV, но если дело доходит до толчка, я готов использовать другую технологию, даже если это означает отказ от некоторых из этих функций.
В основном существует 3 способа отображения данных в DataGridView
Создавайте строки вручную в цикле, как вы сейчас делаете: как вы заметили, это очень неэффективно, если у вас много данных
Используйте виртуальный режим DataGridView
, как предложил Джонатан в своем комментарии: DGV создает столько строк, сколько может быть отображено, и динамически изменяет их содержимое, когда пользовательские прокрутки. Вам нужно обработать событие CellValueNeeded
, чтобы передать необходимые данные в DGV
.Использовать привязку данных: это, безусловно, самый простой способ. Вы просто заполняете DataTable
данными из базы данных с помощью DbDataAdapter
и назначаете эту DataTable
свойству DataSource
DGV. DGV может автоматически создавать столбцы (AutoGenerateColumns = true
), или вы можете создать их вручную (необходимо установить DataPropertyName
столбца на имя поля, которое вы хотите отобразить. ). В режиме с привязкой к данным DGV работает так же, как и в виртуальном режиме, за исключением того, что он заботится о получении данных из источника данных, поэтому вам не нужно ничего делать. Это очень эффективно даже для большого количества строк