怎样根据实际的数据宽度来显示DBGird每列的宽度,而不是根据后台数据库表中定义的宽度来显示。

解决方案 »

  1.   

    for i:=0 to sGrid.Columns.Count-1 do
      begin
        MaxWidth:=length(sGrid.Columns.Items[i].Title.Caption)*6;
        DataSet.First;
        while not DataSet.Eof do
        begin
          if Maxwidth<length(DataSet.fieldByName(sGrid.Columns.Items[i].DisplayName).AsString) * 6 then
            Maxwidth:=length(DataSet.fieldByName(sGrid.Columns.Items[i].DisplayName).AsString) * 6;
          DataSet.Next;
        end;
        sGrid.Columns.Items[i].Width:=MaxWidth + 6;
        if sGrid.Columns.Items[i].Width>300 then
           sGrid.Columns.Items[i].Width:=300;
        if sGrid.Columns.Items[i].Width<50 then
           sGrid.Columns.Items[i].Width:=50;
      end;
      

  2.   

    你应该根据记录的长度,动态设置你的DBGRID的COLUME.WIDTH。没有什么了,就这些
      

  3.   

    考虑从之类入手,这是解决根本的方法,不过难度比较高;或者,建立一个文本文件,用来存储dbgrid的title信息(如:宽度。字体。字段数。)
    第一次调整写入ini文件就好。。然后每次读取ini不会浪费资源(如果出现新的数据长度。那么再重复一次操作!)
      

  4.   

    --> huangmai(黄麦) 
    你的方法还是比较好的,这样可以减少重复操作。可取!!