Question

I have a TDBGrid component called grMain. I need to know length of value of the longest entries of Column which retrivied on grMain to adjust the minimal width of the form holding the grMain.

How to get the length of the longest entry on TDBGrid Columns?

Thanks in advance.

Was it helpful?

Solution

Something like that ...

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);
        ZeroMemory(@a[0],SizeOf(Integer)*Length(a));
        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 + C_Add;
                    end;

                end;
            ds.Next;
          end;
        for I := 0 to Grid.Columns.Count - 1 do Grid.Columns[i].Width := a[i];
        ds.GotoBookmark(bm);
        finally
          ds.FreeBookmark(bm);
          ds.EnableControls;
        end;
      end;
end;

procedure TForm1.Button1Click(Sender: TObject);

begin
  FitGrid(DBgrid1)
end;
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top