it-swarm.com.ru

DataGridView AutoFit и Fill

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

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

enter image description here

70
James Jeffery

Вам необходимо использовать свойство 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();, чтобы обновить сетку.

134
Chris

Это мой любимый подход ...

_dataGrid.DataBindingComplete += (o, _) =>
    {
        var dataGridView = o as DataGridView;
        if (dataGridView != null)
        {
           dataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;
           dataGridView.Columns[dataGridView.ColumnCount-1].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
        }
    };
19
AlfredBr

Просто измените свойство из свойства управления: AutoSizeColumnsMode:Fill

OR По коду

dataGridView1.AutoSizeColumnsMode=DataGridViewAutoSizeColumnsMode.Fill;

6
Ahosan Karim Asik

Не проверено, но вы можете попробовать. Проверено и работает. Я надеюсь, что вы можете играть с 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;

Это должно работать

4
Sriram Sakthivel

Попробуй сделать,

 AutoSizeColumnMode = Fill;
0
Aki
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);
        }
    }
0
Jay