Столбец 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 to DataGridViewAutoSizeColumnMode.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);

после установки источника данных. Он установит ширину и позволит изменить размер.