dbgrid类控件可以动态改变列宽 但如何才能让每列的宽=实际数据库列中最大宽度拉?
也就是说比如dbgrid.coulmns[1]列中默认宽度是等于字段设计宽度的 但如何让dbgrid列宽等于实际数据最大宽度 如何求这个最大列宽度 让dbgrid.coulmns[n].wigth能动态自动适应?有人知道么?

解决方案 »

  1.   

    用SQL语句求出每列最大的宽度
    select max(length(field1)) from table1;
      

  2.   

    循环得到需要改变的那个列的字段长度,取得最大长度,换算成象素,就是需要改变的最大宽度
    (与font有关)给你一个函数
    //////////////////////////////////////////////////////////////////////////////
    // 作者:Canan 日期:2002/11/27
    // 功能:根据字体设置已知字符串的显示宽度
    // 参数:AFont:字符串的Font
    //       AStr:字符串
    // 返回:象素值
    //////////////////////////////////////////////////////////////////////////////
    function GetTextWidth(AFont:TFont;AStr:string):Integer;
    begin
      try
        with TCanvas.Create do
          try
            Handle := GetDC(0);
            Font := AFont;
            Result := TextWidth(AStr);
          finally
            Free;
          end;
      except
        result := 0;
      end;
    end;
      

  3.   


    DBGrid1.Fields[0].DisplayWidth := N
      

  4.   

    DBGrid1.Fields[0].DisplayWidth := LENGTH(DBGrid1.Fields[0].AsString)
      

  5.   

    楼上方法怎么行啊!我要的是LENGTH(DBGrid1.Fields[0].AsString最大值的那个一个 请问怎么取得?
      

  6.   

    哪你只能写一条sql语句了,或循环判断了。写sql语句,速度应该快些。
      

  7.   

    楼主没有必要这样子小心复杂的处理这些东西吧?不过取出最长的再设置 width,不过要是字段就一行中的值比较长,其他的都比较短,岂不是不太好了。
      

  8.   

    我用读数据方法写的 先找去最大字段值 然后换算成屏幕显示宽度 还能用 但是我想知道GRID的原理 寻找更好的办法 难道没有高手可以讨教了么?
      

  9.   

    如果想知道grid的原理的话,阅读它的源码看看。
    你的问题的另外一个解决方法就是自己手动添加数据(DBGrid1DrawColumnCell方法),每添加一个数据,比较它的长度
    和现在column的长度,取最长值。
      

  10.   

    既然已经计算出字段最大宽度(字符数),直接赋值给Column的Width就行了,还计算屏幕点阵干吗?
      

  11.   

    楼上差矣,假如字符长度54,你设置column的width为54试试,看看是多宽?
      

  12.   

    屏幕点阵这些东西都容易计算 关键问题在如何获得GRID某列某行的具体宽度
    用select max(len.....这类语句 表大的时候慢得很
     谁能告诉我如何获得GRID表的具体的某列某行的宽度?
      

  13.   

    就是上面他们所说的那样呀你可以把数据源给open;
    再一个一个的把表中的数据表字段值的最大的长度提出
    给各个列设其宽度。
      

  14.   

    你还是先找出每一字段里所有数据的Length吧!
    然后再
    DBGrid1.Fields[0].DisplayWidth := LENGTH(dbgrid1.DataSource.DataSet.Fields[i].AsString)
      

  15.   

    遍历数据的方法我早就知道了 但如果一个表里的字段多 行也多速度肯定慢
    我想知道最好的方法是GRID在画表格时就能自动适应宽度 这方面技术还是比较难的 非要高手出现指点才行呀!~
      

  16.   

    你说想要现成的控件,我可以告诉你,是Ehlib,DBGridEh有一个AutoFitColWidths属性,你设置为True即可.TDBGridEh.AutoFitColWidths:BooleanSpecifies whether the column widths automatically sets grid width equal to client width.
      

  17.   

    那个东东我也用过 效果一点没有 我就奇怪 明写是TDBGridEh.AutoFitColWidths 就一点反应没有!