How can I autosize a column in my datagrid

Platform: WinForms| Category: Datagrid

One way to do this is to use MeasureString to compute the size of the text in each cell, and then take the maximum value. Below is a code snippet that does this. It assumes your datagrid is bound to a datatable. You can download a full working sample. (C#,VB).

public void AutoSizeCol(int col)
{
  float width = 0;
  int numRows = ((DataTable) dataGrid1.DataSource).Rows.Count;
    
  Graphics g = Graphics.FromHwnd(dataGrid1.Handle);
  StringFormat sf = new StringFormat(StringFormat.GenericTypographic);
  SizeF size;

  for(int i = 0; i < numRows; ++ i)
  {
    size = g.MeasureString(dataGrid1[i, col].ToString(), dataGrid1.Font, 500, sf);
    if(size.Width > width)
      width = size.Width;
  }

  g.Dispose();

  dataGrid1.TableStyles[''customers''].GridColumnStyles[col].Width = (int) width + 8; // 8 is for leading and trailing padding
}

Share with

Related FAQs

Couldn't find the FAQs you're looking for?

Please submit your question and answer.