Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi TreeView mit 200.000 Einträge und nachladen (https://www.delphipraxis.net/56780-treeview-mit-200-000-eintraege-und-nachladen.html)

jaikai 11. Nov 2005 00:00


TreeView mit 200.000 Einträge und nachladen
 
Hi Leute,

ich habe eine TreeView, die später 200.000 Einträge hat. Alles auf einmal zu laden wäre Wahnsinn.

Aber - es gibt das (Explorerartige) Verfahren des nachladens und entladen der Knoten.

Kann mir mal bitte jemand im Schnelldurchlauf schreiben, wie dies funktioniert?

Danke

xaromz 11. Nov 2005 00:03

Re: TreeView mit 200.000 Einträge und nachladen
 
Hallo,

dazu geht man folgendermaßen vor: Die Knoten der aktuellen Ebene erstellen. Nachschauen, welche Knoten Unterknoten besitzen. Dort jeweils einen Dummyknoten einfügen, damit ein Pluszeichen erscheint. Im OnChange-Ereignis prüfen, ob ein Dummyknoten existiert, dann diesen löschen und stattdessen die Ebene einlesen.

Gruß
xaromz

jaikai 11. Nov 2005 00:09

Re: Danke
 
Die NAchtarbeiter sind ja mal wieder Fix - Danke!

sh17 11. Nov 2005 07:45

Re: TreeView mit 200.000 Einträge und nachladen
 
Zitat:

Zitat von xaromz
Die Knoten der aktuellen Ebene erstellen. Nachschauen, welche Knoten Unterknoten besitzen. Dort jeweils einen Dummyknoten einfügen, damit ein Pluszeichen erscheint. Im OnChange-Ereignis prüfen, ob ein Dummyknoten existiert, dann diesen löschen und stattdessen die Ebene einlesen.

Nicht unbedingt optimal.

Besser eine virtuelle Variante einer TreeView verwenden, die läd die Daten erst, wenn Sie in den Sichtbereich rücken. Sehr scnell.

kostenlose Variante unter

http://www.soft-gems.net/VirtualTreeview/

Lannes 11. Nov 2005 07:46

Re: TreeView mit 200.000 Einträge und nachladen
 
Hallo,

einen Dummyknoten einfügen ist nicht erforderlich, es reicht folgendes:
Delphi-Quellcode:
TreeView1.Selected.HasChildren := True;
//...
if TreeView1.Selected.HasChildren then
  //Knoten laden

xaromz 11. Nov 2005 08:37

Re: TreeView mit 200.000 Einträge und nachladen
 
Hallo,
Zitat:

Zitat von Lannes
Hallo,

einen Dummyknoten einfügen ist nicht erforderlich, es reicht folgendes:
Delphi-Quellcode:
TreeView1.Selected.HasChildren := True;
//...
if TreeView1.Selected.HasChildren then
  //Knoten laden

ist zwar richtig, aber dann kann man nicht feststellen, ob man hier noch was reinladen muss oder das schon gemacht hat.

Gruß
xaromz

dfried 11. Nov 2005 08:51

Re: TreeView mit 200.000 Einträge und nachladen
 
Zitat:

Zitat von xaromz
ist zwar richtig, aber dann kann man nicht feststellen, ob man hier noch was reinladen muss oder das schon gemacht hat.

Wenn "Count" 0 ist, dann muss noch geladen werden.

Lannes 11. Nov 2005 09:07

Re: TreeView mit 200.000 Einträge und nachladen
 
Hallo,

feststellen ob noch geladen werden muss:
Delphi-Quellcode:
if (TreeView1.Selected.HasChildren) and
   (TreeView1.Selected.Count = 0) then
  showmessage('Noch Laden');

jaikai 24. Jan 2006 21:38

Re: TreeView mit 200.000 Einträge und nachladen
 
Weiterführende Fragen zum Thema - weil ich total verwirrt und irgendwie orientierungslos geworden bin. In den Foren gibsts nur ansatzweise Abhilfe meines Problems.

Zitat:

xaromz --> dazu geht man folgendermaßen vor: Die Knoten der aktuellen Ebene erstellen. Nachschauen, welche Knoten Unterknoten besitzen. Dort jeweils einen Dummyknoten einfügen, damit ein Pluszeichen erscheint. Im OnChange-Ereignis prüfen, ob ein Dummyknoten existiert, dann diesen löschen und stattdessen die Ebene einlesen.
Ohne Betriebsgeheimnisse stehlen zu wollen:
Irgendwie ist mir nicht klar, wie ich die notwendige Datenstruktur hierzu erstellen muß. Ich habe 200.000 Einträge, die ich beliebig zusammenstellen kann. Als #09-Einrückern formatiert und load - benötigt der komplette Baum ca 20-30 sec. Einzelne Root-Zweige bis zu 8 sec. Das ist mir zu lang.

Oder aber wie diess (so wie ichs gern verwenden würde, weil ich hier das Icon, die passende Verlinkung und mehr bereits integrieren kann):

Delphi-Quellcode:
Datei   Knoten
|        |  NodeText
|        |  |
00097498:00:Root-Knoten ganz unten (00) -> davon gibts 50 Stück
00097499:01:Unterknoten 0-1
00097500:02:Unterknoten 0-2
00097501:01:Unterknoten 0-3
00097502:02:Unterknoten 0-3-1
00097503:02:Unterknoten 0-3-2
00097504:03:Unterknoten 0-3-2-1
etc
Fragen:

--> Die Knoten der aktuellen Ebene erstellen...
Benötigt eine Datei mit diesem Index oder aber Handarbeit. Benötigen die SubEinträge denn ebenfalls jeweils Dateien, die geladen und eingefügt werden? Oder kann ich nicht dem Knoten so etwas wie einen neuen absoluten Index verpassen, der meinem zweiten Modell entspricht? Ich hab gelesen, ein Objekt zuordnen würde gehen, finde aber keine Hinweise, wie das geht.

--> Im OnChange-Ereignis prüfen, ob ein Dummyknoten(HasChildren)existiert
Nachfrage dessen ist mir klar - aber das ganze müßte dann wieder gestoppt werden. Also eine Begrenzung des füllens. Ebene einlesen - sieht wieder nach indizierten Dateien aus, oder Abfragen, ob der Sub-Eintrag noch Childs enthält, dann break. Ich will die Erzeugung von möglichen 200.000 Dateien vermeiden. Wie geht das?

Wenn ich keine Urheberrechte verletze, hat jemand ein paar Source-Beispiel für mich? Ich blick da nicht wirklich durch.

Danke

:?

sh17 25. Jan 2006 05:35

Re: TreeView mit 200.000 Einträge und nachladen
 
Zitat:

Ich habe 200.000 Einträge, die ich beliebig zusammenstellen kann. Als #09-Einrückern formatiert und load - benötigt der komplette Baum ca 20-30 sec. Einzelne Root-Zweige bis zu 8 sec. Das ist mir zu lang.
Ich kann nur nochmal auf die virtuelle Variante in meinem vorherigen Posting verweisen. Die wird auch einige Deiner anderen Probleme lösen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:54 Uhr.
Seite 1 von 3  1 23      

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