![]() |
Datenbank: Firebird • Version: 2.5 • Zugriff über: AnyDAC
Spalten ausblenden bei DBGrid sehr langsam
Hallo,
ich habe in meiner Anwendung ein DBGrid, das Daten aus einem Dataset mit ca. 130 Spalten anzeigen soll. Meistens jedoch sind nur wenige Spalten sichtbar (kann vom Anwender eingestellt werden), deshalb blende ich alle anderen Spalten aus (mit DBGrid.Columns[i].Visible := False). Leider scheint das Ausblenden der Spalten beim DBGrid sehr langsam zu sein (ca. eine halbe Sekunde beim Ausblenden aller nicht benötigten Spalten). Der Anwender kann bei der Anzeige zwischen verschiedenen Datasets wechseln, dabei gibt es dann immer eine entsprechende Verzögerung (da es nur ein DBGrid gibt und das jedes Mal entsprechend aktualisiert werden muss). Das Dataset selber zu verkleinern (indem nur die zur Anzeige benötigten Spalten aus der Datenbank geholt werden) scheidet leider aus, da ich die nicht sichtbaren Spalten intern benötige. Hat jemand einen Tip, wie ich das beschleunigen könnte? Oder gibt es vielleicht andere schnellere Komponenten analog zum DBGrid? |
AW: Spalten ausblenden bei DBGrid sehr langsam
Wenn Du nur die benötigten Columns erzeugst?
Im einfachsten Falle über die Property visisble der Fields, dann werden nur die benötigten Columns erzeugt. |
AW: Spalten ausblenden bei DBGrid sehr langsam
Danke für den Tipp.
Leider funktioniert das nicht so wie es sollte, die Spalten, deren Felder ich im DataSet auf Visible = False gesetzt habe, erscheinen trotzdem im DBGrid. Ich habe auch schon RebuildColumns versucht, aber das hat auch nichts geholfen. |
AW: Spalten ausblenden bei DBGrid sehr langsam
Zitat:
Dann bist Du auch für die Zukunft für alles offen. |
AW: Spalten ausblenden bei DBGrid sehr langsam
Du darfst dann natürlich die Spalten im GridEditor nicht persistent erstellt haben.
|
AW: Spalten ausblenden bei DBGrid sehr langsam
Das Design ist nicht von mir, ich muss mich nur damit rumschlagen (immerhin bin ich die BDE inzwischen losgeworden :wink:).
Das Problem mit dem unsichtbar schalten im Dataset war, dass RebuildColumns gerade wieder die im Dataset ausgeblendeten Spalten zurückgeholt hat. Ohne RebuildColumns funktioniert es jetzt mit dem Ausblenden im Dataset selbst. Durch die Änderung ist das Ausblenden deutlich schneller geworden, ca. Faktor 400 im Vergleich zu vorher direkt im DBGrid. |
AW: Spalten ausblenden bei DBGrid sehr langsam
Du hast das Ausblenden der Spalten (im DBGrid) aber auch mit BeginUpdate/EndUpdate gemacht?
Delphi-Quellcode:
begin
DBGrid1.Columns.BeginUpdate; try // hier jetzt die Spalten ein- oder ausblenden finally DBGrid1.Columns.EndUpdate; end; end; |
AW: Spalten ausblenden bei DBGrid sehr langsam
vielen Dank für den Hinweis, mit dem BeginUpdate/EndUpdate wird auch das Ausblenden im DBGrid selbst sehr viel schneller.
Ich habe nach genau dieser Funktion in der Hilfe zum DBGrid gesucht, aber wegen des wenig hilfreichen Kommentars zu BeginUpdate habe ich das nicht gefunden ("Erhöht die Eigenschaft UpdateLock um eins, wenn die Daten im Gitter geändert werden"). Allerdings hätte ich gedacht, dass bei DBGrid.Visible = False das Grid sowieso nicht gezeichnet würde (was wohl ein Irrtum war). |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:07 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-2025 by Thomas Breitkreuz