Reputation: 16186
I have a WinForms application with DataGridView
control. My control has five
columns (say "Name", "Address", "Phone" etc)
I am not happy with default column width. I want to have more control over column appearance. What I want is to be able to do one of the following:
Please suggest - which property to use and how.
Upvotes: 57
Views: 351265
Reputation: 10681
You can use the DataGridViewColumn.Width
property to do it:
DataGridViewColumn column = dataGridView.Columns[0];
column.Width = 60;
http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridviewcolumn.width.aspx
Upvotes: 74
Reputation: 69
Use the Columns Property and set the Auto Size Mode to All Cells, Resizable to True, Frozen to False and visible to True.
The column will automatically resize based on the data inserted.
Upvotes: 0
Reputation: 461
The following also can be tried:
DataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.DisplayedCells
or use the other setting options in the DataGridViewAutoSizeColumnsMode Enum
Upvotes: 46
Reputation: 2285
You can set default width and height for all Columns and Rows as below only with one loop.
// DataGridView Name= dgvMachineStatus
foreach (DataGridViewColumn column in dgvMachineStatus.Columns)
{
column.Width = 155;
}
foreach (DataGridViewRow row in dgvMachineStatus.Rows)
{
row.Height = 45;
}
Upvotes: 1
Reputation: 1
or Simply you can go to the form and when you call the data to be displayed you set the property
like
datagridview1.columns(0).width = 150
datagridview1.columns(1).width = 150
datagridview1.columns(2).width = 150enter code here
So simple worked so fine with me Bro
Upvotes: -3
Reputation: 341
I know this is an old question but no one ever answered the first part, to set width in percent. That can easily be done with FillWeight (MSDN). In case anyone else searching comes across this answer.
You can set DataGridAutoSizeColumnMode to Fill in the designer. By default that gives each column FillWeight of 100. Then in code behind, on FormLoad event or after binding data to grid, you can simply:
gridName.Columns[0].FillWeight = 200;
gridName.Columns[1].FillWeight = 50;
And so on, for whatever proportional weight you want. If you want to do every single column with numbers that add up to 100, for a literal percent width, you can do that too.
It gives a nice full DataGrid where the headers use the whole space, even if the user resizes the window. Looks good on widescreen, 4:3, whatever.
Upvotes: 23
Reputation: 20818
Most of the above solutions assume that the parent DateGridView
has .AutoSizeMode
not equal to Fill
. If you set the .AutoSizeMode
for the grid to be Fill
, you need to set the AutoSizeMode for each column to be None
if you want to fix a particular column width (and let the other columns Fill). I found a weird MS exception regarding a null object if you change a Column Width and the .AutoSizeMode
is not None
first.
This works
chart.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
... add some columns here
chart.Column[i].AutoSizeMode = DataGridViewAutoSizeColumnMode.None;
chart.Column[i].Width = 60;
This throws a null exception regarding some internal object regarding setting border thickness.
chart.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
... add some columns here
// chart.Column[i].AutoSizeMode = DataGridViewAutoSizeColumnMode.None;
chart.Column[i].Width = 60;
Upvotes: 30
Reputation: 141
DataGridView1.Columns.Item("Adress").Width = 60
DataGridView1.Columns.Item("Phone").Width = 30
DataGridView1.Columns.Item("Name").Width = 40
DataGridView1.Columns.Item("Etc.").Width = 30
Upvotes: 2
Reputation: 1157
I you dont want to do it programmatically, you can manipulate to the Column width property, which is located inside the Columns property.Once you open the column edit property you can choose which column you want to edit, scroll down to layout section of the bound column properties and change the width.
Upvotes: 1
Reputation: 377
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;
}
}
}
Upvotes: 3
Reputation: 156
i suggest to give a width to all the grid's columns like this :
DataGridViewTextBoxColumn col = new DataGridViewTextBoxColumn();
col.HeaderText = "phone"
col.Width = 120;
col.DataPropertyName = (if you use a datasource)
thegrid.Columns.Add(col);
and for the main(or the longest) column(let's say address) do this :
col = new DataGridViewTextBoxColumn();
col.HeaderText = "address";
col.Width = 120;
tricky part
col.MinimumWidth = 120;
col.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
tricky part
col.DataPropertyName = (same as above)
thegrid.Columns.Add(col);
In this way, if you stretch the form (and the grid is "dock filled" in his container) the main column, in this case the address column, takes all the space available, but it never goes less than col.MinimumWidth, so it's the only one that is resized.
I use it, when i have a grid and its last column is used for display an image (like icon detail or icon delete..) and it doesn't have the header and it has to be always the smallest one.
Upvotes: 4
Reputation: 21
Use:
yourdataView.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells);
Upvotes: 2
Reputation: 16003
Regarding your final bullet
make width fit the text
You can experiment with the .AutoSizeMode of your DataGridViewColumn, setting it to one of these values:
None
AllCells
AllCellsExceptHeader
DisplayedCells
DisplayedCellsExceptHeader
ColumnHeader
Fill
More info on the MSDN page
Upvotes: 10