DataGridView - как установить ширину столбца? - PullRequest
38 голосов
/ 28 января 2010

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

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

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

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

Ответы [ 12 ]

51 голосов
/ 28 января 2010

Для этого можно использовать свойство DataGridViewColumn.Width:

DataGridViewColumn column = dataGridView.Columns[0];
column.Width = 60;

http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridviewcolumn.width.aspx

26 голосов
/ 20 октября 2011

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

DataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.DisplayedCells

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

22 голосов
/ 23 мая 2013

В большинстве вышеприведенных решений предполагается, что родительский элемент 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;
12 голосов
/ 23 мая 2016

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

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

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

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

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

7 голосов
/ 28 января 2010

Относительно вашей последней пули

чтобы ширина соответствовала тексту

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

None
AllCells
AllCellsExceptHeader
DisplayedCells
DisplayedCellsExceptHeader
ColumnHeader
Fill

Больше информации на MSDN странице

3 голосов
/ 05 апреля 2012

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

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);

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

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

2 голосов
/ 23 февраля 2012

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

yourdataView.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells);
2 голосов
/ 13 февраля 2012
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;
            }

    }
}
1 голос
/ 01 апреля 2014
DataGridView1.Columns.Item("Adress").Width = 60
    DataGridView1.Columns.Item("Phone").Width = 30
    DataGridView1.Columns.Item("Name").Width = 40
    DataGridView1.Columns.Item("Etc.").Width = 30
1 голос
/ 10 сентября 2013

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

...