Медленно, чтобы установить DataGridView DataSource в DataTable в C # - PullRequest
3 голосов
/ 11 января 2011

У меня есть DataTable, полностью заполненный, который я хочу установить в DatagridView:

gdv.DataSource = dt;

Однако, это мучительно медленно.Заполнение DataTable очень быстро, но только эта строка выше занимает много времени.Есть ли способ ускорить это или выполнить в другом потоке?

После этой точки нет взаимодействия.Просто простое утверждение выше!

Спасибо.

Ответы [ 5 ]

8 голосов
/ 11 января 2011

Проверьте параметры форматирования, особенно свойства, связанные с Fill.Настройка ширины столбцов для всех строк требует большого количества вычислений.

5 голосов
/ 06 ноября 2013

Вот исправление.Проблема состоит в том, что каркас изменяет размеры столбцов один раз в строке в новом источнике данных (почему ??).И, конечно же, каждый раз он должен проходить по всем строкам, что приводит к операции O (n ^ 2).К сожалению, похоже, что вы должны отключить автоматическое изменение размера перед настройкой источника данных, а затем вручную вызвать метод AutoResizeColumns.Forms DataGridView Control ", который может помочь вам, если у вас есть другой параметр пользовательского интерфейса, который имеет ту же сложную проблему вычислений.

http://msdn.microsoft.com/en-us/library/ha5xt0d9.aspx

1 голос
/ 09 января 2015

С этим кодом у меня хорошие результаты:

dtgvPlanificado.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.None
dtgvPlanificado.ColumnHeadersVisible = False  
dtgvPlanificado.DataSource = DS.Tables("LV1")  
dtgvPlanificado.ColumnHeadersVisible = True  
dtgvPlanificado.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells
0 голосов
/ 25 ноября 2016

для меня изменение RowHeadersWidthSizeMode с:

DataGridViewRowHeadersWidthSizeMode.AutoSizeToAllHeaders;

на:

DataGridViewRowHeadersWidthSizeMode.AutoSizeToDisplayedHeaders;

было чрезвычайно полезным.

0 голосов
/ 05 июня 2016

AutoSizeColumnsMode - это настоящее узкое место ... и 11 секунд становятся 15 мс.

Вот что я искал:

<System.Runtime.CompilerServices.Extension()>
Public Sub BeginLoadData(dataGridView As DataGridView)
    dataGridView.Tag = dataGridView.AutoSizeColumnsMode
    dataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.None
End Sub

<System.Runtime.CompilerServices.Extension()>
Public Sub EndLoadData(dataGridView As DataGridView)
    dataGridView.AutoSizeColumnsMode = CType(dataGridView.Tag, DataGridViewAutoSizeColumnsMode)
End Sub
...