AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi DBGrid Spaltenbreite
Thema durchsuchen
Ansicht
Themen-Optionen

DBGrid Spaltenbreite

Ein Thema von Medium · begonnen am 26. Mai 2008 · letzter Beitrag vom 20. Dez 2018
Antwort Antwort
Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#1

DBGrid Spaltenbreite

  Alt 26. Mai 2008, 15:34
Datenbank: MySQL • Version: 4.1 • Zugriff über: Zeos
Ahoi!

Ich bekomme es gerade irgendwie nicht hin, die Spaltenbreiten in meinem DBGrid so zu ändern, wie ich es möchte. Ich möchte für einigen Spalten die Breite abhängig vom Titeltext machen, was an und für sich ja kein Problem ist. Allerdings wird das Grid zyklisch aktualisiert, und flackert durch das Ändern der Breiten ausgesprochen unschön.
Das Problem ist, dass ich Disable/EnableControls des Datasets zwar einsetzen kann während ich einen neue Query öffne, aber die zu ändernden Spalten gibt es in dem Grid natürlich zu dem Zeitpunkt nach dem Query.Open noch nicht, da das Grid ja disabled ist.
Sobald EnableControls aufgerufen wird, zeichnet sich das Grid sofort - und erst danach kann ich die Spaltenbreiten der nun vorhandenen Columns ändern. Das löst aber wieder für jede Spalte erneut ein Neuzeichnen aus, wodurch dann letztlich 4x gezeichnet wird, ich aber nur ein Mal ganz zum schluss will.

Im OnDrawColumnCell kann ich das auch nicht unterbringen, da auch dort ein Ändern der Breite ein Neuzeichnen auslöst, wodurch das ganze zu einer hübschen Endlosschleife wird.

Ein Begin/EndUpdate kennt das DBGrid wohl leider nicht . Weiss jemand wie ich diese Repaint-Odyssee beenden kann?
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#2

Re: DBGrid Spaltenbreite

  Alt 27. Mai 2008, 11:49
Hat sich vorläufig erstmal erledigt, da ich es so umgestellt hab, dass ich zur Designtime erstellte Columns mit den richtigen Breiten nehmen kann. Für ein Grid, dass aber u.U. unterschiedliche Tabellen verarbeiten können soll ist dieses Verhalten dennoch ärgerlich. Also: Akkutes Problem gelöst, die Lösung ist nur nicht universell
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#3

Re: DBGrid Spaltenbreite

  Alt 27. Mai 2008, 12:01
Hi,

eine einfache Lösung ist immer nach der Berechnung zu prüfen, ob die Spalte schon die richtige Breite hat. Also den errechneten wert mit der aktuellen Spaltenbreite vergleichen. Ist die gleich, so wird nichts getan, sonst neu gesetzt. Damit ist das Flackern dann weg.

Ich benutze diese Methode häufig in den Settermethoden der Propertys meiner Componenten. Manchmal kann man Rekursionen nicht vermeiden, wenn die Änderung einer Eigenschaft die Änderung einer anderen nach sich zieht und umgekehrt. Durch den Vergleich wird dies unterbrochen. Ich lasse dann auch das Control nicht neu zeichnen, was Performance bringt und das Flackern vermeidet.

Gruß oki
42
  Mit Zitat antworten Zitat
FediDelPr

Registriert seit: 16. Feb 2018
112 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#4

AW: DBGrid Spaltenbreite

  Alt 20. Dez 2018, 14:02
Wie lässt sich die Spaltenbreie eines DBGrid fixieren, so dass nicht bei jedem
ADOQuery.Open die Zeilenbreite wieder von der Datenbank übernommen werden ?

Mit der DBGrid Option dgColumnResize geht's leider nicht.
Da gibt es doch sicher eine ganz einfache Lösung.

Gruss und Danke für Ideen.
  Mit Zitat antworten Zitat
FediDelPr

Registriert seit: 16. Feb 2018
112 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#5

AW: DBGrid Spaltenbreite

  Alt 20. Dez 2018, 14:26
noch vergessen, sollte zwar eigentlich nicht wichtig sein.

Delhi Berlin 10.1, Zugriff über ADOQuery, ACCESS 2016
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: DBGrid Spaltenbreite

  Alt 20. Dez 2018, 14:31
Am Besten die Spalten (Columns) des DBGrids fest deklarieren, dann werden diese nicht dynmaisch aus der Abfrage generiert und behalten die Einstellungen.
Markus Kinzler
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.733 Beiträge
 
Delphi 6 Enterprise
 
#7

AW: DBGrid Spaltenbreite

  Alt 20. Dez 2018, 14:31
Da du nach einer einfachen Lösung suchst ist das Wegschreiben der Spaltenbreiten im Query.BeforeClose und das erneute setzten der Spaltenbreiten im Query.AfterOpen wahrscheinlich nicht das, was du suchst?
Ralph
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.415 Beiträge
 
Delphi 7 Professional
 
#8

AW: DBGrid Spaltenbreite

  Alt 20. Dez 2018, 14:40
TJvDBGrids von den Jedis nehmen und dort AutoSizeColumns auf false setzen.

Bei dem TJvDBGrid kann man auch die Mindest- bzw. Höchstbreite der Spalten festlegen ...

Ansonsten: Im AfterOpen der Tabellen- / Abfragekomponente die Werte nach Wunsch setzen.

Alte Werte ggfls. im BeforeClose-Ereignis speichern, um sie später wieder laden zu können.

Dazu könnte man zum Speichern DBGrid1.Columns.SaveToFile(DBGrid1.Name + '.cfg') und zum Laden DBGrid1.Columns.LoadFromFile(DBGrid1.Name + '.cfg') nehmen.
  Mit Zitat antworten Zitat
FediDelPr

Registriert seit: 16. Feb 2018
112 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#9

AW: DBGrid Spaltenbreite

  Alt 20. Dez 2018, 19:20
Danke für die Lösungen!

Vorerst genügt die Variante mit ADOQuery.AfterOpen;
Ein paar Stichworte zu "die Spalten fest deklarieren" würden mich schon noch interessieren.
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.415 Beiträge
 
Delphi 7 Professional
 
#10

AW: DBGrid Spaltenbreite

  Alt 20. Dez 2018, 20:05
Query in der Entwicklungsumgebung öffnen.
Dann mit der rechten Maustase auf das DBGrid klicken.

Nun im Spalteneditor alle benötigten Spalten hinzufügen und die Spaltenbreite ... im DBGrid "zurechtschibbeln".
Danach in der Entwicklungsumgebung die Query schließen.

Die vorgenommene Konfiguration des DBGrids sollte dann erhalten bleiben.

Solange die Query immer für das gleiche Select genutzt wird und sich nur die Wherebedingung (soweit vorhanden) ändert, sollte die Optik des DBGrids unverändert bleiben.
  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 23:41 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