Ответ 1
Для этого можно использовать свойство DataGridViewColumn.Width:
DataGridViewColumn column = dataGridView.Columns[0];
column.Width = 60;
http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridviewcolumn.width.aspx
У меня есть приложение WinForms с элементом управления DataGridView
. Мой контроль имеет пять
столбцы (например, "Имя", "Адрес", "Телефон" и т.д.)
Мне не нравится ширина столбца по умолчанию. Я хочу больше контролировать внешний вид столбца. Что я хочу должен иметь возможность выполнить одно из следующих действий:
Пожалуйста, предложите - какое свойство использовать и как.
Для этого можно использовать свойство DataGridViewColumn.Width:
DataGridViewColumn column = dataGridView.Columns[0];
column.Width = 60;
http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridviewcolumn.width.aspx
Можно также попробовать следующее:
DataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.DisplayedCells
или использовать другие параметры настройки в окне DataGridViewAutoSizeColumnsMode Enum
Большинство приведенных выше решений предполагают, что родительский 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;
Я знаю, что это старый вопрос, но никто не ответил на первую часть, чтобы установить ширину в процентах. Это можно легко сделать с помощью FillWeight (MSDN). В случае, если кто-то другой ищет этот ответ.
Вы можете установить DataGridAutoSizeColumnMode для заполнения дизайнера. По умолчанию это дает каждому столбцу FillWeight 100. Затем в коде позади, в событии FormLoad или после привязки данных к сетке вы можете просто:
gridName.Columns[0].FillWeight = 200;
gridName.Columns[1].FillWeight = 50;
И так далее, для любого пропорционального веса, который вы хотите. Если вы хотите делать каждый столбец с номерами, которые содержат до 100, для ширины буквенного процента, вы также можете это сделать.
Он дает хороший полный DataGrid, где заголовки используют все пространство, даже если пользователь изменяет размер окна. Выглядит хорошо на широкоформатном экране, 4: 3, что угодно.
Что касается вашей последней пули
сделать ширину в соответствии с текстом
Вы можете поэкспериментировать с .AutoSizeMode вашего DataGridViewColumn, установив его на одно из следующих значений:
None
AllCells
AllCellsExceptHeader
DisplayedCells
DisplayedCellsExceptHeader
ColumnHeader
Fill
Дополнительная информация на странице MSDN
Я предлагаю задать ширину для всех столбцов сетки, например:
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, поэтому это единственный размер, который изменяется.
Я использую его, когда у меня есть сетка, а его последний столбец используется для отображения изображения (например, информация о значке или удаление значка...), и у него нет заголовка, и он должен быть всегда самым маленьким.
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;
}
}
}
Использование:
yourdataView.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells);
Я не хочу делать это программно, вы можете манипулировать с свойством Column width, которое находится внутри свойства Columns. Когда вы откроете свойство редактирования столбца, вы можете выбрать, какой столбец вы хотите отредактировать, прокрутите вниз до макета раздел свойств связанного столбца и измените ширину.
DataGridView1.Columns.Item("Adress").Width = 60
DataGridView1.Columns.Item("Phone").Width = 30
DataGridView1.Columns.Item("Name").Width = 40
DataGridView1.Columns.Item("Etc.").Width = 30
Вы можете установить ширину и высоту по умолчанию для всех столбцов и строк, как показано ниже, только с одним циклом.
// DataGridView Name= dgvMachineStatus
foreach (DataGridViewColumn column in dgvMachineStatus.Columns)
{
column.Width = 155;
}
foreach (DataGridViewRow row in dgvMachineStatus.Rows)
{
row.Height = 45;
}
или просто вы можете перейти к форме, и когда вы вызываете отображаемые данные, вы устанавливаете свойство
как
datagridview1.columns(0).width = 150
datagridview1.columns(1).width = 150
datagridview1.columns(2).width = 150 enter code here
Так просто работал так хорошо со мной Bro