Столбец DataGridView автоматически регулирует ширину и изменение размера
Мне интересно, можно ли иметь столбец datgridview для автоматической настройки его ширины на его содержимое и в то же время изменять размер пользователем ?
вот что я пробовал до сих пор:
dataGridView.AllowUserToResizeColumns = true;
dataGridView.Columns[0].AutoSizeMode=DataGridViewAutoSizeColumnMode.DisplayedCells;
dataGridView.Columns[0].Resizable = DataGridViewTriState.True;
но я все еще не могу изменить размер столбца вручную.
Если кто-то уже сталкивался с этой проблемой или есть идеи, дайте мне знать.
спасибо.
5 ответов
я, наконец, найти способ сделать то, что я хотел.
идея
- пусть
dataGridView
измените размер самих столбцов в соответствии с содержимым, а затем - изменить
AutoSizeColumnMode
и установите ширину со значением, которое вы только что сохранили.
вот код:
dataGridView.Columns[i].AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
int widthCol = dataGridView.Columns[i].Width;
dataGridView.Columns[i].AutoSizeMode = DataGridViewAutoSizeColumnMode.None;
dataGridView.Columns[i].Width = widthCol;
надеюсь, это поможет.
построение кода выше, чтобы повторить его для все столбцы а также автоматическая регулировка ширины DataGridView
//initiate a counter
int totalWidth = 0;
//Auto Resize the columns to fit the data
foreach (DataGridViewColumn column in mydataGridView.Columns)
{
mydataGridView.Columns[column.Index].AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
int widthCol = mydataGridView.Columns[column.Index].Width;
mydataGridView.Columns[column.Index].AutoSizeMode = DataGridViewAutoSizeColumnMode.None;
mydataGridView.Columns[column.Index].Width = widthCol;
totalWidth = totalWidth + widthCol;
}
//the selector on the left of the DataGridView is about 45 in width
mydataGridView.Width = totalWidth + 45;
вещь, которая не очевидна (это было не для меня), заключается в том, что использование AutoSizeMode означает, что мы хотим, чтобы размер управлялся, поэтому это означает, что пользователь не будет (не может) изменять размер. Итак, что я пробовал, и, похоже, работает, это использовать DataGridView.AutoResizeColumn (обратите внимание, что он делает однократное изменение размера) для каждого столбца или большинства столбцов, затем установите DataGridView.AllowUserToResizeColumns к true. Вероятно, есть и другие варианты, но важно то, что использование AutoSizeMode взаимно эксклюзив, позволяющий пользователю изменять размер.
- Спасибо за решение выше (для итерации через
DataGridView.Columns
, измененияAutoSizeMode
к действительному, соберите значение ширины и установите его назад после измененияAutoSizeMode
toDataGridViewAutoSizeColumnMode.None
). - я боролся с ним, и заметил, что это не будет работать, когда он вызывается из конструктора класса или любой строки перед
Form.Show()
илиForm.ShowDialog()
. Поэтому я поместил этот фрагмент кода вForm.Shown
событие и это работает для меня. -
мой преобразованный код, reguardless of whatever
DataGridView.AutoSizeColumnsMode
установить раньше, я используюDataGridViewColumn.GetPreferredWidth()
вместо измененияDataGridViewColumn.AutoSizeMode
и немедленно установите значение ширины, затем изменитеDataGridView.AutoSizeColumnsMode
после:private void form_Shown(object sender, EventArgs e) { foreach (DataGridViewColumn c in dataGridView.Columns) c.Width = c.GetPreferredWidth(DataGridViewAutoSizeColumnMode.DisplayedCells, true); dataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.None; }
-
обязательно установите
dataGridView.AllowUserToResizeColumns = true;
Я не знаю, почему это работает только после того, как форма показана.
вы можете просто использовать этот простой код:
dataGridView1.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.DisplayedCells);
после установки источника данных. Он установит ширину и позволит изменить размер.