Mega Code Archive

 
Categories / Delphi / ADO Database
 

Autosize a dbgrid-column to fit its contents

Thanks to Thomas Stutz' tip on this site!} { A dbgrid is awkward since it has no cells,} { you have to step through the table using next;} { This procedure is however slow } procedure SetGridColumnWidths(Grid: Tdbgrid); const DEFBORDER = 10; var temp, n: Integer; lmax: array [0..30] of Integer; begin with Grid do begin Canvas.Font := Font; for n := 0 to Columns.Count - 1 do //if columns[n].visible then lmax[n] := Canvas.TextWidth(Fields[n].FieldName) + DEFBORDER; grid.DataSource.DataSet.First; while not grid.DataSource.DataSet.EOF do begin for n := 0 to Columns.Count - 1 do begin //if columns[n].visible then begin temp := Canvas.TextWidth(trim(Columns[n].Field.DisplayText)) + DEFBORDER; if temp > lmax[n] then lmax[n] := temp; //end; { if } end; {for} grid.DataSource.DataSet.Next; end; { while } grid.DataSource.DataSet.First; for n := 0 to Columns.Count - 1 do if lmax[n] > 0 then Columns[n].Width := lmax[n]; end; { With } end; {SetGridColumnWidths } procedure TForm1.Button1Click(Sender: TObject); begin SetGridColumnWidths(dbgrid3); end;