Serialcoder en Français Serialcoder in English
TEL : +33 (0)9 72 13 15 17

Windows Forms FAQ resources

5. Windows Forms Datagrid

5.52 How can I autosize a column in my 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
}