其实问题很简单,就是使dbgrid的每一列长度刚好等于该列中最长的字符串的长度,简单吧!!!!!本人想了N种方法都不行,包括查看VCL源码等各种方法。
各位高手,高手,高高手,谢谢了!!!!!!!!
如果能帮我发到

解决方案 »

  1.   

    顶一下.偶也很需要这个.麻烦高手有源码地也给偶发一份
    [email protected]
      

  2.   

    先调用一个查询语句SELECT Max(Len(C1)) AS Length FROM Table WHERE ....
    然后设置一下列的最大长度,然后再查询记录
      

  3.   

    所有字段 SELECT Max(Len(C1)) AS Length01 ,Max(Len(2)) AS Length02,Max(Len(C3)) AS Length03 FROM Table WHERE ....
      

  4.   

    procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;
      Field: TField; State: TGridDrawState);
    var
      Str: String;
      ColWidth, Index, TextWidth: Integer;
    begin
      Str := Field.Value;
      Index := Field.Index;
      ColWidth := DBGrid1.Columns.Items[Index].Width;  TextWidth := DBGrid1.Canvas.TextWidth(Str);
      if TextWidth >= ColWidth then
        DBGrid1.Columns.Items[Index].Width := TextWidth + 4;
    end;procedure TForm1.ADOTable1AfterOpen(DataSet: TDataSet);
    var
      I: Integer;
    begin
      for I := 0 to DBGrid1.Columns.Count - 1 do begin
        DBGrid1.Columns[I].Width := 10;
      end;
    end;
      

  5.   

    procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    var
      Str: String;
      ColWidth, TextWidth: Integer;
    begin
      Str := Column.DisplayName;
      ColWidth := Column.Width;  TextWidth := DBGrid1.Canvas.TextWidth(Str);
      if TextWidth >= ColWidth then
        Column.Width := TextWidth + 4;
    end;
    这是对标题的处理楼主可能想复杂了
    ^_^
      

  6.   

    修罗 的方法好,可以极大的发挥CPU的功效 :)
      

  7.   

    连TDBGrid本身连接的数据都是这样写出来的^_^
      

  8.   

    用Ehlib控件组 的 DBGridEh 控件 ,用 3.0 以上版本的,轻松搞定,不需要编写一行代码。
      

  9.   

    to WGYKING(修罗是谁?!) 
    感谢WGYKING(修罗是谁?!) ,你的代码让我.........原来如此EASY。不过把它做成PROC/FUN形式后会更适用一点
      

  10.   

    考虑下修改dbgird的事件。我正想着手改。
      

  11.   

    这个就很容易了
    自己继承TDBGrid覆盖一下
    DrawDataCell
    DrawColumnCell就可以了
    呵呵