[gelöst] DBGrid - Automatisch Spaltenbreite

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
Benutzeravatar
kralle
Lazarusforum e. V.
Beiträge: 994
Registriert: Mi 17. Mär 2010, 14:50
OS, Lazarus, FPC: Linux Mint 20 , FPC 3.3.1 , Lazarus 2.1.0 -Win10 & XE7Pro
CPU-Target: 64Bit
Wohnort: Bremerhaven
Kontaktdaten:

[gelöst] DBGrid - Automatisch Spaltenbreite

Beitrag von kralle »

Moin,

ich lade aus einer SQL-Datenbank in ein DBGrid - soweit so gut.
Leider, passt sich die Spaltenbreite aber nicht dem Inhalt an.

Auch ein:

Code: Alles auswählen

   DBGrid1.Options := DBGrid1.Options + [dgAutoSizeColumns];
   DBGrid1.AutoAdjustColumns;               
ändert daran nichts.

Also, habe ich im Netz gesucht und bin auf diesen Code gestoßen:

Code: Alles auswählen

Procedure TForm1.AutoSizeColDBGrid(DBGrid:TDBGrid);
var i, ColWidth, ColTextWidth:integer;
begin
 if DBGrid.DataSource.DataSet.Active then
   begin
     DBGrid.DataSource.DataSet.DisableControls;
     for i:= 0 to DBGrid.Columns.Count-1 do
       begin
         ColWidth:=DBGrid.Canvas.TextWidth(DBGrid.Columns[i].Field.DisplayLabel);
         DBGrid.DataSource.DataSet.First;
       while not DBGrid.DataSource.DataSet.EOF do
        begin
       ColTextWidth:=DBGrid.Canvas.TextWidth(DBGrid.Columns[i].Field.DisplayText);
          if (ColTextWidth > ColWidth) then
            begin
              ColWidth := ColTextWidth;
            end;
          DBGrid.DataSource.DataSet.Next;
       end;{while}
       DBGrid.Columns[i].Width:=ColWidth+10;
     end;{for}
DBGrid.DataSource.DataSet.EnableControls;
DBGrid.DataSource.DataSet.First;
end;
end;            
Im Einzelschritt konnte ich zwar verfolgen, das der Code ausgeführt wird, aber das DBGrid bleibt wie es war.

Also, schickte ich noch ein:

Code: Alles auswählen

   DBGrid1.Refresh;
   DBGrid1.Repaint;  
hinterher - leider erfolglos.

Ich habe jetzt vom Dreizeiler über den Code oben bis zu Code mit mehreren Proceduren und Funktionen, verschiedenen Code erfolglos probiert.
Ich schätze mal, das ich irgendeine Info nicht habe ...

Gruß Heiko
Zuletzt geändert von kralle am Mo 3. Jul 2023, 20:57, insgesamt 1-mal geändert.
OS: Manjaro Linux, Debian und Windows 10
FPC-Version: 3.2.2 , Lazarus 3.0
+ Delphi XE7SP1

wp_xyz
Beiträge: 4895
Registriert: Fr 8. Apr 2011, 09:01

Re: DBGrid - Automatisch Spaltenbreite

Beitrag von wp_xyz »

Die Option dgAutoSizeColumns funktioniert bei mir einwandfrei - siehe Projektchen im Anhang.
Dateianhänge
dbgrid autocolwidth.zip
(2.83 KiB) 75-mal heruntergeladen

Benutzeravatar
kralle
Lazarusforum e. V.
Beiträge: 994
Registriert: Mi 17. Mär 2010, 14:50
OS, Lazarus, FPC: Linux Mint 20 , FPC 3.3.1 , Lazarus 2.1.0 -Win10 & XE7Pro
CPU-Target: 64Bit
Wohnort: Bremerhaven
Kontaktdaten:

Re: DBGrid - Automatisch Spaltenbreite

Beitrag von kralle »

Moin,

bei mir läuft es jetzt auch.
Die Lösung: DBGrid löschen und ein DBGrid neu auf das Formular legen :oops:
Ich habe wohl zu viel mit den Einstellungen und Optionen herum probiert und eine Kombination erwischt,
die Probleme verursacht.

Es funktioniert jetzt auch ohne zusätzliche Procedure.

Gruß Heiko
OS: Manjaro Linux, Debian und Windows 10
FPC-Version: 3.2.2 , Lazarus 3.0
+ Delphi XE7SP1

Antworten