Вам нужно использовать DataGridViewColumn.AutoSizeMode
собственность.
Вы можете использовать одно из этих значений для столбцов 0 и 1:
AllCells: ширина столбца регулируется, чтобы соответствовать содержимому всех ячеек в столбце, включая ячейку заголовка.
AllCellsExceptHeader: ширина столбца регулируется, чтобы соответствовать содержимому всех ячеек в столбце, за исключением ячейки заголовка.
DisplayedCells: ширина столбца регулируется в соответствии с содержимым всех ячеек в столбце, которые находятся в строках, отображаемых в данный момент на экране, включая ячейку заголовка.
DisplayedCellsExceptHeader: ширина столбца регулируется, чтобы соответствовать содержимому всех ячеек в столбце, которые находятся в строках, отображаемых в данный момент на экране, за исключением ячейки заголовка.
Затем вы используете значение Fill для столбца 2
Ширина столбца настраивается таким образом, чтобы ширина всех столбцов точно заполняла область отображения элемента управления ...
this.DataGridView1.Columns[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
this.DataGridView1.Columns[1].AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
this.DataGridView1.Columns[2].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
Как указали другие пользователи, значение по умолчанию может быть установлено на datagridview
уровне сDataGridView.AutoSizeColumnsMode
свойства.
this.DataGridView1.Columns[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
this.DataGridView1.Columns[1].AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
может быть:
this.DataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.DisplayedCells;
Важная заметка:
Если ваша сетка привязана к источнику данных и столбцы генерируются автоматически (для AutoGenerateColumns
свойства установлено значение True), вам необходимо использовать DataBindingComplete
событие для применения стиля ПОСЛЕ создания столбцов.
В некоторых сценариях (например, изменение значения ячеек по коду) мне приходилось вызывать, DataGridView1.AutoResizeColumns();
чтобы обновить сетку.
Это мой любимый подход ...
_dataGrid.DataBindingComplete += (o, _) => { var dataGridView = o as DataGridView; if (dataGridView != null) { dataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells; dataGridView.Columns[dataGridView.ColumnCount-1].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; } };
источник
index out of bound exception
просто исправьте это, спасибо !!Просто измените Property из свойства элемента управления:
AutoSizeColumnsMode:Fill
ИЛИ по коду
dataGridView1.AutoSizeColumnsMode=DataGridViewAutoSizeColumnsMode.Fill;
источник
Не проверено, но вы можете попробовать.Проверено и работает. Я надеюсь, что вы сможете поиграть сAutoSizeMode
of,DataGridViewColum
чтобы достичь того, что вам нужно.Попробуйте установить
dataGridView1.DataSource = yourdatasource;<--set datasource before you set AutoSizeMode //Set the following properties after setting datasource dataGridView1.Columns[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; dataGridView1.Columns[1].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; dataGridView1.Columns[2].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
Это должно работать
источник
Попробуйте сделать,
источник
public static void Fill(DataGridView dgv2) { try { dgv = dgv2; foreach (DataGridViewColumn GridCol in dgv.Columns) { for (int j = 0; j < GridCol.DataGridView.ColumnCount; j++) { GridCol.DataGridView.Columns[j].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; GridCol.DataGridView.Columns[j].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; GridCol.DataGridView.Columns[j].FillWeight = 1; } } } catch (Exception ex) { MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
источник
GridCol
. Во-вторых, он устанавливает AutoSizeMode для каждого столбца на два разных значения; второе присвоение перезапишет первое.Чтобы основываться на ответе Альфредбра, если вы скрыли некоторые из своих столбцов, вы можете использовать следующее для автоматического изменения размера всех столбцов, а затем просто заполнить пустое пространство последним видимым столбцом:
источник
Это то, что я сделал, чтобы столбец "first_name" заполнил пространство, когда все столбцы не могут этого сделать.
Когда сетка становится маленькой, столбец «first_name» становится почти невидимым (очень тонким), поэтому я могу установить для DataGridViewAutoSizeColumnMode значение AllCells в качестве других видимых столбцов. Для проблем с производительностью важно установить для них значение None перед привязкой данных и вернуть значение AllCell в обработчике событий DataBindingComplete сетки. Надеюсь, поможет!
private void dataGridView1_Resize(object sender, EventArgs e) { int ColumnsWidth = 0; foreach(DataGridViewColumn col in dataGridView1.Columns) { if (col.Visible) ColumnsWidth += col.Width; } if (ColumnsWidth <dataGridView1.Width) { dataGridView1.Columns["first_name"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; } else if (dataGridView1.Columns["first_name"].Width < 10) dataGridView1.Columns["first_name"].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; }
источник
public void setHeight(DataGridView src) { src.Height= src.ColumnHeadersVisible ? src.ColumnHeadersHeight : 0 + src.Rows.OfType<DataGridViewRow>().Where(row => row.Visible).Sum(row => row.Height); }
источник
Попробуй это :
источник