代码如何写啊?用什么方法好?

解决方案 »

  1.   

    //比如下面是设置DBGrid第一列字段的长度
    DBGrid1.Fields[0].DisplayWidth:= 50;
      

  2.   

    这个方法不行啊,我是想DBGRID能自行适应所要显示的长度就是说数据库中的实际内容有多少,宽度就正好显示
      

  3.   

    这个至少我不提倡!原因:
    1、每次查询结果不同,TDBGrid的列宽就在变来变去,显得界面很乱
    2、严重影响效率,因为你要根据内容设置独出每列数据源的最大值,然后根据当前字体设置宽度!
    3、有一个很严重的问题就是在很多字体下一个汉字并不是两个英文字符的宽度(例如宋体10号一个汉字宽度是13,而2个英文字符宽度是14),这种情况下你的设置毫无意义
    4、日期,数字等字段的长度不固定,如果单纯从数据库中读取长度根本毫无意义!方法:
    将数据字段转换成文本后获取长度,然后根据当前字体读取字体宽度,两个相乘在加固定值即可!
      

  4.   

    回复人: xyj0323(xyj0323) ( ) 信誉:100  2003-03-29 17:49:00  得分:0 
     
     
      我也想知道,你的意思我明白,就是要根锯字段的内容(也就是要知道其中最长的那条内容)
    有多长,我想了半天,还是没有结果,谁知道解决方案
      
     
    原来你也想知道啊
      

  5.   

    给你看我以前写的代码:
    procedure tviewallfrm.setclowid;          //让列宽最适合间距
    var
      i,Grid1CloWth:integer;
    begin
      DBGrid.Visible:=false;
      for i:=0 to DBGrid.Columns.Count-1 do begin
        Grid1CloWth:=canvas.TextWidth(DBGrid.Columns[i].DisplayName)+5;//取标题字段宽
        mainfrm.adoquery1.First;
        while not mainfrm.adoquery1.Eof do begin
            if Grid1CloWth<canvas.TextWidth(trim(mainfrm.adoquery1.Fields[i].AsString)) then
            Grid1CloWth:=canvas.TextWidth(trim(mainfrm.adoquery1.Fields[i].AsString))+8;
            mainfrm.adoquery1.Next;
        end;
        DBGrid.Columns[i].Width:=Grid1CloWth;
      end;
      DBGrid.Visible:=true;
    end;