![]() |
DBGrid Column autosize
Hi Leute,
ich würde gerne die Spalten die mein DBGrid (das ganz normale DBGrid aus Delphi5 Prof.) über ein Autosize anpassen. Ich finde es nämlich ziemlich unschön, wenn ich ein Datenbankfeld als String deklariert habe mit 250 Zeichen, aber momentan nur 100 brauche und die Breite dieses columns trotzdem 250 beträgt. Gibts da eine Möglichkeit zum Autosize wie in der ListView? GRüßle Ben |
Re: DBGrid Column autosize
Hallo BenjaminHelbig,
ich verwende zur Lösung dieses Problems folgende Prozedur, getestet und funktionsfähig:
Code:
mfg
procedure UP_MinTabRow(Tab : TTable; dbg : TDBGrid);
const chkanz = 300; // CHecK ANZahl von Datensätzen zur Beschränkung des Zeitaufwandes maxfldanz = 100; // max. Anz. der Felder, die betrachtet werden minwidth = 20; // min. Breite korrwidth = 10; // Korr. der Spaltenbreite wg. besserer Optik var i, fcnt, // Field-Count aktrec, zel, len : integer; farr : array[0..maxfldanz] of integer; begin // Tab1 - TTable if not Tab.Active then exit; Tab.DisableControls; aktrec := Tab.RecNo; zel := 0; for i:=0 to maxfldanz do farr[i] := minwidth; Tab.First; fcnt := Tab.FieldCount; if fcnt > maxfldanz then fcnt := maxfldanz; while (not Tab.EOF) and (zel < chkanz) do begin for i:=0 to fcnt-1 do begin len := dbg.Canvas.TextWidth(dbg.Columns.Grid.Fields[i].Text); if len > farr[i] then farr[i] := len; end; Tab.Next; inc(zel); end; for i := 0 to fcnt-1 do begin try dbg.Columns[i].Width := farr[i] + korrwidth; except dbg.Columns[i].Width := dbg.Columns[i].Width; end; end; Tab.RecNo := aktrec; Tab.EnableControls; end; eddy |
Re: DBGrid Column autosize
Hallo,
Ich hab zu dem Thema folgenden Link gefunden ![]() Schöne Grüße Markus |
Re: DBGrid Column autosize
Hallo mark250678,
hast Du ihn auch mal ausprobiert? Da werden Spaltenbreiten kleiner Null und verschwinden aus der Anzeige. Mal sehen, was sich daraus machen läßt. mfg eddy |
Re: DBGrid Column autosize
Hallo Eddy,
Also ich habs mal kurz getestet. Ich hab den Code aber noch ein wenig an meine Anwendung anpassen müssen. Der einzige Punkt der mir noch nicht gefällt ist, dass alle Positionen im Grid erstmal durchlaufen werden, und solange das passiert, kann scheint die Anwendung auf keine Aktionen mehr zu reagieren. Ausserdem reisst es die Performance ziemlich runter. Wäre besser, wenn die max. Länge einer Spalte über das DataSet ermittelt würde, bevor sie im Grid angezeigt werden. (D.h.sobald die Daten von der Datenbank kommen). Ich hatte das mit den Spaltenbreiten kleiner Null übrigens auch, aber ich gehe her und und lass die Spalten erstmal minimieren (wie in dem Link beschrieben) und danach an die Gesamtbreite des Grids anpassen. Klappt eigentlich wunderbar, bis eben auf oben beschriebenes Problem. Dafür hab ich leider auch noch keine Lösung parat. Schöne Grüße Markus |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:00 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz