C # DataGridView AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells - PullRequest
4 голосов
/ 28 января 2011

Я отображаю таблицу с до 100 000 строк в DataGridView. В таблице есть один столбец, который содержит большие строки. Я обнаружил, что установка AutosizeMode в AllCells приводит к зависанию приложения в течение длительного времени при вычислении необходимой ширины. В качестве компромисса я установил режим автоматического изменения размера на DisplayedCells. Затем я связал метод с событием прокрутки dataGrid:

public void MethodThatBindsDataToTheDatagridview(DataTable table)
{
   dataGrid.Source = table;
   dataGrid.Columns[1].AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
   dataGrid.Columns[2].AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
}

public void DataGridScroll(object sender, ScrollEventArgs e)
{
   ((DataGridView)sender).Update();
}

Я тоже пробовал то же самое с Refresh методом. Я ожидаю, что DataGrid установит ширину столбцов в соответствии с отображаемыми строками. Однако это происходит только один раз, когда таблица загружается, но событие прокрутки не вызывает изменения ширины столбцов.

Ответы [ 2 ]

5 голосов
/ 28 января 2011

Вызов метода AutoResizeColumn для таблицы данных - это то, что вам нужно сделать:

 dataGrid.AutoResizeColumn(1, DataGridViewAutoSizeColumnMode.DisplayedCells);
 dataGrid.AutoResizeColumn(2, DataGridViewAutoSizeColumnMode.DisplayedCells);
0 голосов
/ 25 июня 2012

Вы также можете использовать метод AutoResizeColumns (DataGridViewAutoSizeColumnsMode autoSizeColumnsMode) при условии, что все ваши столбцы должны быть изменены с использованием того же алгоритма. Таким образом, ваш код также применим к любым столбцам, которые вы можете добавить в будущем.

Удивительно, но перегрузка AutoResizeColumns () изменит размер всех столбцов с помощью параметра AllCells, а не изменит размер каждого столбца в соответствии с его настройкой AutoSizeMode.

...