Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Spaltenbreite im TDBGrid (https://www.delphipraxis.net/148400-spaltenbreite-im-tdbgrid.html)

Andidreas 1. Mär 2010 11:59

Datenbank: MySQL • Version: 5.x • Zugriff über: MyDac

Spaltenbreite im TDBGrid
 
hallo zusammen,

wenn ich daten aus einer datenbank abfrage und diese über ein datasource in meinem dbgrid anzeigen lasse, dann wird als spaltenbreite auf die länge des datenbank feldes angepasst...

gibt es auch eine möglichkeit die spaltenbreite an den längsten wert des feldes anzupassen? also so etwas ähnliches wie im excel... dort heißt es glaub "autofit"

Andidreas 1. Mär 2010 13:21

Re: Spaltenbreite im TDBGrid
 
so für alle die des auch suchen...

so kann man en autofit für alle spalten auf sein dbgrid machen:

Delphi-Quellcode:
procedure TForm1.Button4Click(Sender: TObject);

var
iMaxTextLength : Integer;
i, j           : Integer;

begin

  //Columns
  For i := 0 To dbgrid_layout.Columns.Count -1 Do
  Begin
    //Row per Column
    iMaxTextLength := 0;
    For j := 1 To dbgrid_layout.DataSource.DataSet.RecordCount Do
    Begin
      dbgrid_layout.DataSource.DataSet.RecNo := j;
      If dbgrid_layout.Canvas.TextWidth(dbgrid_layout.Columns[i].Field.DisplayText) > iMaxTextLength Then
      Begin
        iMaxTextLength := dbgrid_layout.Canvas.TextWidth(dbgrid_layout.Columns[i].Field.DisplayText);
      End;
    End;
    //Check Title Text longer then Item Text
    If dbgrid_layout.Canvas.TextWidth(dbgrid_layout.Columns[i].Title.Caption) > iMaxTextLength Then
    Begin
      dbgrid_layout.Columns[i].Width := dbgrid_layout.Canvas.TextWidth(dbgrid_layout.Columns[i].Title.Caption) + 10;
    End Else
    Begin
      dbgrid_layout.Columns[i].Width := iMaxTextLength + 10;
    End;
  End;

  dbgrid_layout.Repaint;

end;
ob des die beste lösung is... kp... aufjedenfall funktionierts


Edit: Source Code aktualisiert

Die Muhkuh 1. Mär 2010 13:33

Re: Spaltenbreite im TDBGrid
 
Es gibt noch die Property "DisplayWidth" ;-)

Andidreas 1. Mär 2010 13:35

Re: Spaltenbreite im TDBGrid
 
inwieweit würde die mir helfen?

Die Muhkuh 1. Mär 2010 13:41

Re: Spaltenbreite im TDBGrid
 
Damit kannst Du bestimmen, wie breit ein Feld bei der Anzeige sein soll.

Da Du nun aber sowieso ein eigenes AutoFit gemacht hast, brauchst Du das nicht mehr.

Andidreas 1. Mär 2010 13:51

Re: Spaltenbreite im TDBGrid
 
ok... aber damit ich displaywidth nutzen kann müsste ich ja erst mal wissen wie lang der längste text in der spalte ist... oder gibt mir display width genau den zurück?

Andidreas 2. Mär 2010 08:10

Re: Spaltenbreite im TDBGrid
 
jetzt hab ich aber folgendes problem...

der obige source gibt mir manchmal die fogende fehlermeldung aus:

EInvalidPointer "Ungültige Zeigeroperation"


aber die fehlermeldung kommt nicht immer... hatt jemand eine idee woran das liegen kann???

FrankJ28 2. Mär 2010 08:44

Re: Spaltenbreite im TDBGrid
 
Hallo,
ich habe deinen Code nicht getestet, aber mich stutzt ein wenig deine Schleife

Delphi-Quellcode:
    For j := 0 To dbgrid1.DataSource.DataSet.RecordCount Do
    Begin
      dbgrid1.DataSource.DataSet.RecNo := j;
Warum ab 0? Wenn Du keine Datensätze hast, dann wird das trotzdem durchlaufen und deine .RecNo=0 müsste auch scheitern.
Ist das vielleicht dein Problem?
Ciao
Frank

Andidreas 2. Mär 2010 08:48

Re: Spaltenbreite im TDBGrid
 
Zitat:

Zitat von FrankJ28
Hallo,
ich habe deinen Code nicht getestet, aber mich stutzt ein wenig deine Schleife

Delphi-Quellcode:
    For j := 0 To dbgrid1.DataSource.DataSet.RecordCount Do
    Begin
      dbgrid1.DataSource.DataSet.RecNo := j;
Warum ab 0? Wenn Du keine Datensätze hast, dann wird das trotzdem durchlaufen und deine .RecNo=0 müsste auch scheitern.
Ist das vielleicht dein Problem?
Ciao
Frank

das mit dem "j := 0" hab ich in meiner aktuellen version bereits auch geändert... hatte vergessen hier den source zu aktualsieren...
aber selbst wenn ich bei 1 beginne tritt der fehler auf...

Andidreas 3. Mär 2010 16:11

Re: Spaltenbreite im TDBGrid
 
*push*


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:06 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