//datagrid自动化
public void AutoSizeTable()
{
int numCols = ((DataTable) dataGrid1.DataSource).Columns.Count;
for(int i = 0; i < numCols; ++i)
AutoSizeCol(i);
}
public void AutoSizeCols(int start, int finish)
{
for(int i = start; i <= finish; ++i)
AutoSizeCol(i);
}
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["d1"].GridColumnStyles[col].Width = (int) width + 8; // 8 is for leading and trailing padding 
 
}

解决方案 »

  1.   

    这句:size = g.MeasureString(dataGrid1[i,col].ToString(),dataGrid1.Font,500,sf);
    异常提示是:指定的参数已超出有效值的范围
    {"指定的参数已超出有效值的范围。\r\n参数名: columnIndex" } System.ArgumentOutOfRangeException
      

  2.   

    自动调整宽度的最好方法就是 把html中的style给删除掉!
      

  3.   

    html??楼上.搞错没有?是windows编程啊.不是web编程.
      

  4.   

    if(dataGrid1[i,col].ToString() != string.Empty)
    {
       size = g.MeasureString(dataGrid1[i,col].ToString(),dataGrid1.Font,500,sf); 
    }