DataGridView AutoFit и Fill
У меня есть 3 столбца в моем DataGridView
. То, что я пытаюсь сделать, состоит в том, чтобы первые 2 столбца автоматически соответствовали ширине содержимого, а третий столбец заполнял оставшееся пространство.
Можно ли это сделать в WinForms? Я загружаю свои данные из EF DataContext, если это используется. Я включил изображение того, как он выглядит в настоящее время.
![enter image description here]()
Ответы
Ответ 1
Вам нужно использовать свойство DataGridViewColumn.AutoSizeMode
.
Вы можете использовать одно из этих значений для столбцов 0 и 1:
AllCells: Ширина столбца настраивается так, чтобы соответствовать содержимому всех ячеек в столбец, включая ячейку заголовка.
AllCellsExceptHeader: Ширина столбца настраивается так, чтобы соответствовать содержимому всех ячеек в столбце, исключая ячейку заголовка.
DisplayedCells: Ширина столбца настраивается на соответствовать содержимому всех ячеек в столбце, которые в настоящее время находятся в строках отображаемый на экране, включая ячейку заголовка.
DisplayedCellsExceptHeader: Ширина столбца настраивается так, чтобы соответствовать содержимое всех ячеек в столбце, которые в настоящее время находятся в строках отображается на экране, исключая ячейку заголовка.
Затем вы используете значение Заполнить для столбца 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();
, чтобы обновить сетку.
Ответ 2
Это мой любимый подход...
_dataGrid.DataBindingComplete += (o, _) =>
{
var dataGridView = o as DataGridView;
if (dataGridView != null)
{
dataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;
dataGridView.Columns[dataGridView.ColumnCount-1].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
}
};
Ответ 3
Просто измените свойство из свойства управления:
AutoSizeColumnsMode:Fill
ИЛИ по коду
dataGridView1.AutoSizeColumnsMode=DataGridViewAutoSizeColumnsMode.Fill;
Ответ 4
Не проверен, но вы можете попробовать. Протестировано и работает. Я надеюсь, что вы можете играть с AutoSizeMode
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;
Это должно работать
Ответ 5
Попробуйте сделать,
AutoSizeColumnMode = Fill;
Ответ 6
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);
}
}
Ответ 7
Чтобы построить ответ AlfredBr, если вы скрыли некоторые из ваших столбцов, вы можете использовать следующее для автоматического изменения размера всех столбцов, а затем просто оставить последний видимый столбец заполнить пустое пространство:
myDgv.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;
myDgv.Columns.GetLastColumn(DataGridViewElementStates.Visible, DataGridViewElementStates.None).AutoSizeMode =
DataGridViewAutoSizeColumnMode.Fill;
Ответ 8
public void setHeight(DataGridView src)
{
src.Height= src.ColumnHeadersVisible ? src.ColumnHeadersHeight : 0 + src.Rows.OfType<DataGridViewRow>().Where(row => row.Visible).Sum(row => row.Height);
}
Ответ 9
Попробуйте следующее:
DGV.AutoResizeColumns();
DGV.AutoSizeColumnsMode=DataGridViewAutoSizeColumnsMode.AllCells;