2010-01-28 2 views
29

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

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

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

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

ответ

41

Вы можете использовать свойство DataGridViewColumn.Width сделать:

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

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

+2

Спасибо! Я просто понял, почему это не работает для меня. MSDN говорит Если указанное значение при установке этого свойства меньше значения свойства MinimumWidth, вместо этого используется значение свойства MinimumWidth. –

+1

Да, ширина недоступна непосредственно элементу управления сеткой, поэтому вы используете ItemStyle.With, чтобы установить его свойство. – Bhaskar

6

Что касается окончательного пули

ширина грим в соответствии с текстом

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

None 
AllCells 
AllCellsExceptHeader 
DisplayedCells 
DisplayedCellsExceptHeader 
ColumnHeader 
Fill 

Более подробную информацию о MSDN странице

21

Ниже можно также судить:

DataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.DisplayedCells 

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

+2

Это лучший ответ.Затем вы можете изменить размер формы, чтобы она соответствовала ширине DataGridView. Thanks Mark! Это избавило меня от хлопот. – Glimpse

+1

Очень хорошо ... , и вы можете использовать этот ответ для строк ... –

+2

При использовании опции «Заполнить» столбцы разворачиваются, чтобы заполнить всю ширину сетки. –

2
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; 
      } 

    } 
} 
2

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

yourdataView.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells); 
3

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

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, поэтому это единственный размер.

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

15

Большинство из приведенных выше решений предполагают, что родительский 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; 
+0

Это помогло мне отладить до часа .. !! – coding

+0

отличное предложение, хотя настоящий странный ...: ~ – Bastiaan

1

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

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

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

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

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

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

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

-2

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

так просто работали так хорошо со мной Братан

0

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

// DataGridView Name= dgvMachineStatus 

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

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