Медленная отрисовка DataGridView

276
05 апреля 2018, 11:52

По событию загрузки формы выполняю следующий код

DoubleBuffered = true;
dgvPersCard.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.None;
dgvPersCard.VirtualMode = true;
string error;
DataTable dt = _repository.GetAllCards2(out error);
if (error != string.Empty)
{
  MessageBox.Show("Помилка ініціалізації.\nТехнічна інформація: " + error, "Помилка");
  return;
}
dgvPersCard.DataSource = dt;

код выполняется быстро. Дальше происходит отрисовка формы и грида dgvPersCard, которая заметна на глаз. Приложил ссылку на видео. Подскажите, пожалуйста, это нормальная скорость работы грида или можно ускорить каким то образом? https://drive.google.com/open?id=1broJsXdhXp_5Soo5_HCRAL6hyH-6MIPe

Answer 1

Двойная буферизация поможет радикально ускорить отрисовку грида. Только включать её нужно именно у грида, а не у формы.

Свойство DoubleBuffered у компонента DataGridView является защищённым, поэтому напрямую его установить нельзя. Придётся создать унаследованный класс.

class DoubleBufferedDataGridView : DataGridView
{
    protected override bool DoubleBuffered { get => true; }
}

Добавьте его в свой проект. Скомпилируйте. Далее используйте его вместо стандартного грида. Скорость отрисовки приятно удивляет.

В вашем коде, я вижу, включена виртуализация датагрида. Между тем вы ей не пользуетесь и загоняете в грид сразу все данные. Между тем, если её грамотно применить - обработать событие NewRowNeeded - то можно и с источниками данных в миллионы строк комфортно работать.

READ ALSO
Сериализация: паттерн composite

Сериализация: паттерн composite

Как нужно записывать в xml-файл объекты класса? Я сделал это так, но при добавлении листа (Leaf) появляется исключение:

282
WPF и ASP.NET видео уроки на русском на C#

WPF и ASP.NET видео уроки на русском на C#

Посоветуйте хорошие видео уроки по WPF и ASPNET (С#) на русском

242
Paint on C# сохранение + рисование

Paint on C# сохранение + рисование

Привет всемХотел узнать а как можно реализовать сохранение картинки + то что я на ней нарисовал, сама функция для сохранения реализована,...

229
Интеграционное тестирование .Net приложений

Интеграционное тестирование .Net приложений

Здравствуйте, мне необходимо реализовать интеграционные тесты настольногоNet приложения, которые будут запускаться после каждого билда

258