Подтвердить что ты не робот

DataGridView AutoFit и Fill

У меня есть 3 столбца в моем DataGridView. То, что я пытаюсь сделать, состоит в том, чтобы первые 2 столбца автоматически соответствовали ширине содержимого, а третий столбец заполнял оставшееся пространство.

Можно ли это сделать в WinForms? Я загружаю свои данные из EF DataContext, если это используется. Я включил изображение того, как он выглядит в настоящее время.

enter image description here

4b9b3361

Ответ 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;