AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Spalten ausblenden bei DBGrid sehr langsam

Spalten ausblenden bei DBGrid sehr langsam

Ein Thema von Gor1 · begonnen am 22. Dez 2011 · letzter Beitrag vom 23. Dez 2011
Antwort Antwort
Gor1

Registriert seit: 11. Mai 2011
32 Beiträge
 
Delphi 10.4 Sydney
 
#1

Spalten ausblenden bei DBGrid sehr langsam

  Alt 22. Dez 2011, 16:44
Datenbank: Firebird • Version: 2.5 • Zugriff über: AnyDAC
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?
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#2

AW: Spalten ausblenden bei DBGrid sehr langsam

  Alt 22. Dez 2011, 16:49
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.
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)

Geändert von Bummi (22. Dez 2011 um 17:14 Uhr)
  Mit Zitat antworten Zitat
Gor1

Registriert seit: 11. Mai 2011
32 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Spalten ausblenden bei DBGrid sehr langsam

  Alt 23. Dez 2011, 09:34
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.
  Mit Zitat antworten Zitat
taveuni

Registriert seit: 3. Apr 2007
Ort: Zürich
451 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Spalten ausblenden bei DBGrid sehr langsam

  Alt 23. Dez 2011, 09:38
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.
Die obige Aussage repräsentiert meine persönliche Meinung.
Diese erhebt keinen Anspruch auf Objektivität oder Richtigkeit.
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#5

AW: Spalten ausblenden bei DBGrid sehr langsam

  Alt 23. Dez 2011, 09:48
Du darfst dann natürlich die Spalten im GridEditor nicht persistent erstellt haben.
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Gor1

Registriert seit: 11. Mai 2011
32 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Spalten ausblenden bei DBGrid sehr langsam

  Alt 23. Dez 2011, 10:21
Das Design ist nicht von mir, ich muss mich nur damit rumschlagen (immerhin bin ich die BDE inzwischen losgeworden ).

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.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#7

AW: Spalten ausblenden bei DBGrid sehr langsam

  Alt 23. Dez 2011, 11:02
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;
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Gor1

Registriert seit: 11. Mai 2011
32 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: Spalten ausblenden bei DBGrid sehr langsam

  Alt 23. Dez 2011, 12:41
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).
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 01:20 Uhr.
Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf