急!DBGRID如何随列的实际宽度动态变化,在线等待!

解决方案 »

  1.   

    var w,i:integer;
    w:=0;
    begin
    for i:=0 to dbgrid1.columns.count-1 do
      w;=w+dbgrid1.columns[i].width+4;
    dbgrid1.clientwidth:=w;
    end;
      

  2.   

    Dbgrid列的宽度就是与Field的长度有关。
      

  3.   

    下面的代码可能对你有用:  if FAutoAdaptive AND (NOT (csDesigning  in ComponentState ))  AND(self.DataSource<>nil) AND (self.DataSource.DataSet<>nil) then
       begin
       if High(DBGridColumnWidth)<>0 then
       begin
        TitleWidth:=Canvas.TextWidth(Trim(Column.Title.Caption))+8;
        TextWidth:=Canvas.TextWidth(Trim(Column.Field.AsString))+8;
        if TextWidth>=TitleWidth then
          nWidth:=TextWidth
        else
          nWidth:=TitleWidth;
        if (DataCol=Columns.Count-1) and (DBGridColumnWidth[Columns.Count-1]=0) then
          begin
            tmpWidth:=0;
            for i:=0 to Columns.Count-1 do
              begin
              tmpWidth:=tmpWidth+Columns[i].Width;
              end;
            Columns[Columns.Count-1].Width:=Columns[Columns.Count-1].Width+(self.ClientWidth-tmpWidth)-2-IndicatorWidth;
            DBGridColumnWidth[Columns.Count-1]:=Columns[Columns.Count-1].Width;
          end;
        if DBGridColumnWidth[DataCol]=0 then Column.Width:=nWidth;
        if nWidth>DBGridColumnWidth[DataCol] then DBGridColumnWidth[DataCol]:=nWidth;
        if Column.Width<DBGridColumnWidth[DataCol] then Column.Width:=DBGridColumnWidth[DataCol];
       end;
      end;
      

  4.   


    在表格绘制每一个单元格事件中:如在第一列,将其实际占用宽度存入列的Tag中,判断每一个单元格的实际占用宽度,与Tag中的值比较,如大于则替换并据此调整列宽删除记录时类似缩小处理代码就不给你写了
      

  5.   

    在你显示数据的时候有的列的值并不是全部的长度相等的
    那么这个时候是不是显示为最长的宽度呢?
    能不能在打开数据库的时候 先获得所有列的数值的最大的宽度
    然后把列款定义为这个呢?这就需要循环来实现获得所有列的最大的长度
    获得其中的某个字段的最大长度
    for i:=0 to adoquery1.recordcount-1 do
    var
     dd:integer;
    begin
    aa:=length(adoquery1.fieldbyname().value);
    if dd<aa then
    dd:=aa
    end;
    然后dngrid.columns[i].width:=最大的值
      

  6.   

    var w,i:integer;
    w:=0;
    begin
    for i:=0 to dbgrid1.columns.count-1 do
      w;=w+dbgrid1.columns[i].width+4;
    dbgrid1.clientwidth:=w;
    end;