dbgrid如何做到自适应列宽?

解决方案 »

  1.   

    楼上说的不能实现,最好用一个INI文件保存设置的值,然后从中读起,
    function TForm1.DBGridAutoSize(mDBGrid: TDBGrid;
      mOffset: Integer): Boolean;
    { 返回数据网格自动适应宽度是否成功 }
    var
      I: Integer;
    begin
      Result := False;
      if not Assigned(mDBGrid) then Exit;
      if not Assigned(mDBGrid.DataSource) then Exit;
      if not Assigned(mDBGrid.DataSource.DataSet) then Exit;
      if not mDBGrid.DataSource.DataSet.Active then Exit;
      for I := 0 to mDBGrid.Columns.Count - 1 do begin
        if not mDBGrid.Columns[I].Visible then Continue;
        if Assigned(mDBGrid.Columns[I].Field) then
          mDBGrid.Columns[I].Width := Max(mDBGrid.Columns[I].Field.Tag,
            mDBGrid.Canvas.TextWidth(mDBGrid.Columns[I].Title.Caption)) + mOffset
        else mDBGrid.Columns[I].Width :=
          mDBGrid.Canvas.TextWidth(mDBGrid.Columns[I].Title.Caption) + mOffset;
       mDBGrid.Refresh;
      end;
      Result := True;
    end; { DBGridAutoSize }
      

  2.   

    EhLib组件可以保存风格的布局,你可以每次退出时保存用户调整的宽度,进入时再引入。