Einzelnen Beitrag anzeigen

rayj

Registriert seit: 18. Okt 2005
46 Beiträge
 
#9

Re: TreeView aus DB mit parentIDs generieren

  Alt 24. Jan 2008, 20:45
Zitat von alzaimar:
Ich habe es so gelöst (damit lassen sich auch Strukturen mit 100.000.000 Einträgen *sofort* in einer Treeview darstellen)

1. Treeview zeigt alle Root-Elemente. Jedes Root-Element enthält genau einen Kindknoten. Der ist als 'dummy' gekennzeichnet. Das Dummy-Kind ist nicht sichtbar (collapsed). dafür hat jeder Knoten ein '+', auch wenn er gar keine Kinder hat.
2. Im OnExpand-Ereignis prüfe ich, ob der Kindknoten ein Dummy ist. Wenn ja, wird er entfernt und die nächste Ebene aus der DB mittels 'Select * from TreeStructure where ParentID = <ID-des-expandierten-Knotens>' geladen und in die Treeview gepackt. Jeder Knoten erhält wieder einen 'dummy'-Childknoten.

Der Vorteil ist eben, das die Treeview unmittelbar zur Verfügung steht, egal wie groß die TreeStructure-Tabelle auf der DB-Seite ist. Ich habe damit alle Verwaltungsbezirk-Unterbezirk-Straßen-Hausnummern Berlins (ca. 2 Mio) dargestellt. Wer will schon in seiner Treeview ALLES sehen?

Vielleicht mach ich mal ein Demo-Projekt daraus und stelle es hier rein. Es scheint eine Standard-Anforderung zu sein.

Ansonsten sortierst Du die Knoten nach Parent-ID und fügst jeden Knoten an die entsprechende Stelle. Dabei suchst Du nicht *jedesmal* nach dem Parent-Node der Treeview, sondern nur dann, wenn sich die Parent-ID zwischen dem einzufügenden und dem vorherigen Eintrag geändert hat. Das geht auch recht flott.

Experimentier doch einfach mal damit und zeig uns Deine Ergebnisse. Es ist bestimmt interessant, ab wieviel Einträgen so ein statischen Laden aller Knoten zu langsam wird.

Ach ja, die TVirtualTreeView von Mike Lischke ist 1000x (mindestens) schneller als die Windows-Treeview und dürfte so bis zu einigen tausend statisch einzufügenden Knoten die richtige Wahl sein.
Grüss dich.
Also diese Idee finde ich wirklich klasse. Daran habe ich noch gar nicht gedacht.

Die VirtualTreeView habe ich auch schon gedownloaded, bisher allerdings noch nie benutzt weil sie ein bisschen komplizierter ist als die standard Delphi TV und mein Programm gleich um 400KB vergrösserte.

Ich weiss zwar noch nicht genau wieviele Einträge da maximal - jemals drin sein werden, vlt so 300-500.
Würdest du dafür schon die Virtual TreeView benutzen?

Danke auf jedenfall!
  Mit Zitat antworten Zitat