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

DataGridView - как установить ширину столбца?

У меня есть приложение WinForms с элементом управления DataGridView. Мой контроль имеет пять столбцы (например, "Имя", "Адрес", "Телефон" и т.д.)

Мне не нравится ширина столбца по умолчанию. Я хочу больше контролировать внешний вид столбца. Что я хочу должен иметь возможность выполнить одно из следующих действий:

  • Установить ширину каждого столбца в процентах
  • Установить ширину каждого столбца в пикселях
  • Используйте другой эффективный метод (сделайте ширину в соответствии с текстом и т.д.).

Пожалуйста, предложите - какое свойство использовать и как.

4b9b3361

Ответ 2

Можно также попробовать следующее:

DataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.DisplayedCells

или использовать другие параметры настройки в окне DataGridViewAutoSizeColumnsMode Enum

Ответ 3

Большинство приведенных выше решений предполагают, что родительский DateGridView имеет .AutoSizeMode не равный Fill. Если вы установите для .AutoSizeMode для сетки значение Fill, вам необходимо установить для параметра AutoSizeMode для каждого столбца значение None, если вы хотите исправить определенную ширину столбца (и пусть остальные столбцы заполняют). Я обнаружил странное исключение MS относительно нулевого объекта, если вы измените ширину столбца, а .AutoSizeMode не является None первым.

Это работает

chart.AutoSizeMode  = DataGridViewAutoSizeColumnMode.Fill;
... add some columns here
chart.Column[i].AutoSizeMode = DataGridViewAutoSizeColumnMode.None;
chart.Column[i].Width = 60;

Это порождает исключительное исключение для некоторого внутреннего объекта относительно установки толщины границы.

chart.AutoSizeMode  = DataGridViewAutoSizeColumnMode.Fill;
... add some columns here
 // chart.Column[i].AutoSizeMode = DataGridViewAutoSizeColumnMode.None;
chart.Column[i].Width = 60;

Ответ 4

Я знаю, что это старый вопрос, но никто не ответил на первую часть, чтобы установить ширину в процентах. Это можно легко сделать с помощью FillWeight (MSDN). В случае, если кто-то другой ищет этот ответ.

Вы можете установить DataGridAutoSizeColumnMode для заполнения дизайнера. По умолчанию это дает каждому столбцу FillWeight 100. Затем в коде позади, в событии FormLoad или после привязки данных к сетке вы можете просто:

gridName.Columns[0].FillWeight = 200;
gridName.Columns[1].FillWeight = 50;

И так далее, для любого пропорционального веса, который вы хотите. Если вы хотите делать каждый столбец с номерами, которые содержат до 100, для ширины буквенного процента, вы также можете это сделать.

Он дает хороший полный DataGrid, где заголовки используют все пространство, даже если пользователь изменяет размер окна. Выглядит хорошо на широкоформатном экране, 4: 3, что угодно.

Ответ 5

Что касается вашей последней пули

сделать ширину в соответствии с текстом

Вы можете поэкспериментировать с .AutoSizeMode вашего DataGridViewColumn, установив его на одно из следующих значений:

None
AllCells
AllCellsExceptHeader
DisplayedCells
DisplayedCellsExceptHeader
ColumnHeader
Fill

Дополнительная информация на странице MSDN

Ответ 6

Я предлагаю задать ширину для всех столбцов сетки, например:

DataGridViewTextBoxColumn col = new DataGridViewTextBoxColumn();
col.HeaderText = "phone"            
col.Width = 120;
col.DataPropertyName = (if you use a datasource)
thegrid.Columns.Add(col);    

и для основного (или самого длинного) столбца (пусть, адрес) выполните следующее:

col = new DataGridViewTextBoxColumn();
col.HeaderText = "address";
col.Width = 120;

сложная часть

col.MinimumWidth = 120;
col.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;

сложная часть

col.DataPropertyName = (same as above)
thegrid.Columns.Add(col);

Таким образом, если вы растягиваете форму (и сетка заполняется "док-станцией" в его контейнере), главный столбец, в этом случае столбец адресов, занимает все свободное пространство, но он никогда не становится меньше, чем col. MinimumWidth, поэтому это единственный размер, который изменяется.

Я использую его, когда у меня есть сетка, а его последний столбец используется для отображения изображения (например, информация о значке или удаление значка...), и у него нет заголовка, и он должен быть всегда самым маленьким.

Ответ 7

public static void ArrangeGrid(DataGridView Grid)
{ 
    int twidth=0;
    if (Grid.Rows.Count > 0)
    {
        twidth = (Grid.Width * Grid.Columns.Count) / 100;
        for (int i = 0; i < Grid.Columns.Count; i++)
            {
            Grid.Columns[i].Width = twidth;
            }

    }
}

Ответ 8

Использование:

yourdataView.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells);

Ответ 9

Я не хочу делать это программно, вы можете манипулировать с свойством Column width, которое находится внутри свойства Columns. Когда вы откроете свойство редактирования столбца, вы можете выбрать, какой столбец вы хотите отредактировать, прокрутите вниз до макета раздел свойств связанного столбца и измените ширину.

Ответ 10

DataGridView1.Columns.Item("Adress").Width = 60
    DataGridView1.Columns.Item("Phone").Width = 30
    DataGridView1.Columns.Item("Name").Width = 40
    DataGridView1.Columns.Item("Etc.").Width = 30

Ответ 11

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

    // DataGridView Name= dgvMachineStatus

   foreach (DataGridViewColumn column in dgvMachineStatus.Columns)
        {
            column.Width = 155;
        }

   foreach (DataGridViewRow row in dgvMachineStatus.Rows)
        {
            row.Height = 45;
        }

Ответ 12

или просто вы можете перейти к форме, и когда вы вызываете отображаемые данные, вы устанавливаете свойство как  datagridview1.columns(0).width = 150  datagridview1.columns(1).width = 150  datagridview1.columns(2).width = 150 enter code here

Так просто работал так хорошо со мной Bro