AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

DBGrid Column autosize

Ein Thema von BenjaminHelbig · begonnen am 16. Dez 2003 · letzter Beitrag vom 18. Dez 2003
Antwort Antwort
BenjaminHelbig

Registriert seit: 23. Okt 2003
Ort: Mannheim
80 Beiträge
 
Delphi 5 Professional
 
#1

DBGrid Column autosize

  Alt 16. Dez 2003, 15:17
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
--------
Es ist schon über so viele Dinge Gras gewachsen, dass ich keinem Rasen mehr traue.
  Mit Zitat antworten Zitat
Benutzerbild von eddy
eddy

Registriert seit: 4. Jan 2003
Ort: Sachsen
573 Beiträge
 
Delphi 5 Professional
 
#2

Re: DBGrid Column autosize

  Alt 18. Dez 2003, 01:23
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
  Mit Zitat antworten Zitat
mark250678

Registriert seit: 31. Okt 2003
Ort: Teublitz
10 Beiträge
 
#3

Re: DBGrid Column autosize

  Alt 18. Dez 2003, 10:19
Hallo,

Ich hab zu dem Thema folgenden Link gefunden

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

Schöne Grüße

Markus
  Mit Zitat antworten Zitat
Benutzerbild von eddy
eddy

Registriert seit: 4. Jan 2003
Ort: Sachsen
573 Beiträge
 
Delphi 5 Professional
 
#4

Re: DBGrid Column autosize

  Alt 18. Dez 2003, 12:11
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
  Mit Zitat antworten Zitat
mark250678

Registriert seit: 31. Okt 2003
Ort: Teublitz
10 Beiträge
 
#5

Re: DBGrid Column autosize

  Alt 18. Dez 2003, 12:51
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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:46 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