怎样使dbgrid的长度随着数据的大小而自动变化

解决方案 »

  1.   

    在与DBGrid1关联的数据集的AfterOpen事件中写如下代码:var
      jsq,maxWidth:integer;
    begin
    DBGrid1.DataSource.Dataset.DisableControls;
    for jsq:=0 to DBGrid1.Columns.Count-1 do
      begin
      DBGrid1.DataSource.Dataset.First;
      maxWidth:=DBGrid1.Canvas.TextWidth(DBGrid1.Columns[jsq].Title.Caption)+10;
        while not DBGrid1.DataSource.Dataset.Eof do
        begin
        if maxWidth<DBGrid1.Canvas.TextWidth(DBGrid1.DataSource.Dataset.Fields.Fields[jsq].AsString) then
          maxWidth:=DBGrid1.Canvas.TextWidth(DBGrid1.DataSource.Dataset.Fields.Fields[jsq].AsString);
        DBGrid1.DataSource.Dataset.Next;
        end;
        DBGrid1.Columns[jsq].Width:=maxWidth;
      end;
    DBGrid1.DataSource.Dataset.EnableControls;
    end;
      

  2.   

    maxWidth:=DBGrid1.Canvas.TextWidth(DBGrid1.Columns[jsq].Title.Caption)+10; 好像是根据字段title的caption的长度来确定的,而不是根据字段的长度来确定的
      

  3.   

    以下正确: DBGrid1.Columns[jsq].Width:=maxWidth;  maxWidth:循环数据源字段长度,取最长的。   明白了吗?
      

  4.   

    同意 tongki_8   DBGrid1.Columns[jsq].Width:=maxWidth;  maxWidth:循环数据源字段长度,取最长的。   明白了吗?
      

  5.   

    同意pilicat(delphi迷) 
    我试过了。