Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi DBGrid Column autosize (https://www.delphipraxis.net/13338-dbgrid-column-autosize.html)

BenjaminHelbig 16. Dez 2003 14:17


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

eddy 18. Dez 2003 00:23

Re: DBGrid Column autosize
 
Hallo BenjaminHelbig,

ich verwende zur Lösung dieses Problems folgende Prozedur, getestet und funktionsfähig:

Code:
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;
mfg
eddy

mark250678 18. Dez 2003 09:19

Re: DBGrid Column autosize
 
Hallo,

Ich hab zu dem Thema folgenden Link gefunden

http://community.borland.com/article...,27548,00.html

Schöne Grüße

Markus

eddy 18. Dez 2003 11:11

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

mark250678 18. Dez 2003 11:51

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 15:16 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz