delphi - 调整列宽 DBGrid

标签 delphi dbgrid

我有一个 TDBGrid。它有效,但显示的列非常大。

如何设置“自动修复列宽”?

最佳答案

所需的列宽取决于网格 Canvas 的设置和每个字段的显示文本的最大长度。

procedure FitGrid(Grid: TDBGrid);
const
  C_Add=3;
var
  ds: TDataSet;
  bm: TBookmark;
  i: Integer;
  w: Integer;
  a: Array of Integer;
begin
  ds := Grid.DataSource.DataSet;
  if Assigned(ds) then
  begin
    ds.DisableControls;
    bm := ds.GetBookmark;
    try
      ds.First;
      SetLength(a, Grid.Columns.Count);
      while not ds.Eof do
      begin
        for I := 0 to Grid.Columns.Count - 1 do
        begin
          if Assigned(Grid.Columns[i].Field) then
          begin
            w :=  Grid.Canvas.TextWidth(ds.FieldByName(Grid.Columns[i].Field.FieldName).DisplayText);
            if a[i] < w  then
               a[i] := w ;
          end;
        end;
        ds.Next;
      end;
      for I := 0 to Grid.Columns.Count - 1 do
        Grid.Columns[i].Width := a[i] + C_Add;
        ds.GotoBookmark(bm);
    finally
      ds.FreeBookmark(bm);
      ds.EnableControls;
    end;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  FitGrid(DBgrid1)
end;

关于delphi - 调整列宽 DBGrid,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17509924/

相关文章:

xml - 有人有描述 Delphi TClientDataSet XML 文件的元数据部分的部分 XSD 吗?

delphi - delphi中如何获取操作系统的语言是双字节?

delphi - 寻找免费的、可定制的数据库网格

delphi - 如何格式化 DBGrid 列以显示两个小数位?

delphi - 如何在 Delphi 中的 dbgrid 上隐藏水平滚动

delphi - 在Delphi中,参数传递给方法时是否按顺序求值?

xml - 使用 TXMLTransformProvider 组件解决 Delphi XE4 中 & 和 CRLF 问题

德尔福7+Zeos : how to prevent sqlite 3 converting date and integer/float to string?

database - ClientDataSet 中的 "key violation"自动增量字段 [Delphi]

delphi - DBGrid 获取选定的单元格