DataGridView AutoFit и Fill

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

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

введите описание изображения здесь

69 голосов | спросил James Jeffery 7 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowSat, 07 Sep 2013 01:04:35 +0400 2013, 01:04:35

8 ответов


0

Вам необходимо использовать ---- +: = 0 =: + ---- .

Вы можете использовать одно из этих значений для столбцов 0 и 1:

  

AllCells: Ширина столбца регулируется в соответствии с содержимым всех ячеек в   столбец, включая ячейку заголовка.
AllCellsExceptHeader: Ширина столбца настраивается в соответствии с содержимым всех ячеек столбца, за исключением ячейки заголовка.
DisplayedCells: Ширина столбца настраивается на   поместите содержимое всех ячеек в столбце, которые в настоящее время находятся в строках   отображается на экране, включая ячейку заголовка.
DisplayedCellsExceptHeader: Ширина столбца изменяется в соответствии с   содержимое всех ячеек в столбце, которые в настоящее время находятся в строках   отображается на экране, исключая ячейку заголовка.

Затем вы используете значение Fill для столбца 2

  

Ширина столбца настраивается таким образом, чтобы ширина всех столбцов точно заполняла область отображения элемента управления ...

DataGridViewColumn.AutoSizeMode

Как указали другие пользователи, значение по умолчанию может быть установлено на уровне 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; установлено значение True), вам необходимо использовать AutoGenerateColumns создано событие для применения столбцов стиля ПОСЛЕ .


В некоторых случаях (например, измените значение ячеек по коду), мне пришлось вызывать DataBindingComplete, чтобы обновить сетку.

ответил Chris 7 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowSat, 07 Sep 2013 01:27:30 +0400 2013, 01:27:30
0

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

_dataGrid.DataBindingComplete += (o, _) =>
    {
        var dataGridView = o as DataGridView;
        if (dataGridView != null)
        {
           dataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;
           dataGridView.Columns[dataGridView.ColumnCount-1].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
        }
    };
ответил AlfredBr 28 J000000Tuesday15 2015, 22:54:46
0

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

ИЛИ по коду

dataGridView1.AutoSizeColumnsMode=DataGridViewAutoSizeColumnsMode.Fill;

ответил Ahosan Karim Asik 25 J0000006Europe/Moscow 2015, 14:59:03
0

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

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

ответил Sriram Sakthivel 7 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowSat, 07 Sep 2013 01:15:41 +0400 2013, 01:15:41
0

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

 AutoSizeColumnMode = Fill;
ответил Aki 31 WedEurope/Moscow2014-12-31T09:10:15+03:00Europe/Moscow12bEurope/MoscowWed, 31 Dec 2014 09:10:15 +0300 2014, 09:10:15
0
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);
        }
    }
ответил Jay 17 FebruaryEurope/MoscowbTue, 17 Feb 2015 04:48:14 +0300000000amTue, 17 Feb 2015 04:48:14 +030015 2015, 04:48:14
0
public void setHeight(DataGridView src)
{
    src.Height= src.ColumnHeadersVisible ? src.ColumnHeadersHeight : 0 +   src.Rows.OfType<DataGridViewRow>().Where(row => row.Visible).Sum(row => row.Height);
}
ответил Durga Prasad Guntoju 3 TueEurope/Moscow2013-12-03T17:18:08+04:00Europe/Moscow12bEurope/MoscowTue, 03 Dec 2013 17:18:08 +0400 2013, 17:18:08
0

Попробуйте это:

  DGV.AutoResizeColumns();
  DGV.AutoSizeColumnsMode=DataGridViewAutoSizeColumnsMode.AllCells;
ответил Sudhir 19 Jpm1000000pmThu, 19 Jan 2017 17:32:22 +030017 2017, 17:32:22

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132