Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Spalten ausblenden bei DBGrid sehr langsam (https://www.delphipraxis.net/165300-spalten-ausblenden-bei-dbgrid-sehr-langsam.html)

Gor1 22. Dez 2011 16:44

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?

Bummi 22. Dez 2011 16:49

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.

Gor1 23. Dez 2011 09:34

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.

taveuni 23. Dez 2011 09:38

AW: Spalten ausblenden bei DBGrid sehr langsam
 
Zitat:

Zitat von Gor1 (Beitrag 1142782)
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.

Böses Design. Datenhaltung und Anzeige trennen. Dann mit einer schnellen ultraflexiblen Anzeige (z.b. VST) arbeiten.
Dann bist Du auch für die Zukunft für alles offen.

Bummi 23. Dez 2011 09:48

AW: Spalten ausblenden bei DBGrid sehr langsam
 
Du darfst dann natürlich die Spalten im GridEditor nicht persistent erstellt haben.

Gor1 23. Dez 2011 10:21

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.

Sir Rufo 23. Dez 2011 11:02

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;

Gor1 23. Dez 2011 12:41

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 04:21 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