Laden...

Baum->DB<->Treeview

Erstellt von amorph vor 18 Jahren Letzter Beitrag vor 18 Jahren 1.983 Views
A
amorph Themenstarter:in
26 Beiträge seit 2006
vor 18 Jahren
Baum->DB<->Treeview

Hi , sicherlich gibt es hierfür einfache und zahlreiche Lösungen aber ich habe trotz einigen Anstrengungen keine vollständige finden können. Deshalb frage ich mal hier: ich würde gerne eine Baumdarstellung ala Outlook implementieren. D.h. ein Baum mit Zweigen unbegrenzter Tiefe. Diesen Baum würde ich gerne in einer Datenbank persistieren. Außerdem sollen die einzelnen Knoten des Baumes einer Sortierung unterliegen (z.B. um später Drag&Drop der Knoten zu ermöglichen).
Gibt es dabei schon fertige Ansätze? Vor allem bei der Transformation des Baumes aus der Datenbank in den Treeview und umgekehrt sowie die Sortierung komme ich irgendwie nicht weiter ...

Gruß und Danke.

S
127 Beiträge seit 2004
vor 18 Jahren

Hallo

wenn ich dich richtig verstanden habe, dann brauchst du nur eine Tabelle
mit der folgenden Strucktur.

Feld Datentyp
ID Int, Auto-Int, oder GUID <das was du als Primarykey einsetzen möchtest>
Beschreibung Tex
RefID <gleicher Datentyp wie dein Primarykey>

Die Datensätze würden dann so aus sehen
ID------Beschreibung----RefID
1------------LaLa---------<Null>
2------------unter LaLa-----1
3------------LiLi-----------<Null>
4------------unter LaLa-----2
5------------unter LiLi-------3

Da durch kannst in einer DB eine Baumstruktur nach stellen.

Das Ergebnis sieht dann so aus
+LaLa(ID = 1)
---+unter LaLa(ID = 2)
------+unter LaLa(ID = 4)
+LiLI(ID = 3)
---+unter LiLi(ID = 5)

Wenn du was verschieben willst (Drag&Drop) brauchts du nur die RefID ändern.
Und du brauchst die Unterknoten erst laden wenn der Benutzer drauf klickt dadurch ist das Programm schneller beim Starten. Weil erstmal nur die RootEbene(alle die Datensätze die in RefID = Null sind) geladen wird. Und Beim Klick auf den Knoten lädst du den Rest nach. Am besten hängst du an den Knoten auch die ID in die Eigenschaft "Tag"

A
amorph Themenstarter:in
26 Beiträge seit 2006
vor 18 Jahren

Hi Suny ,

schon mal vielen Dank für die Antwort !! Im Grunde genommen hast du schon Recht mit deinem Vorschlag. Nur leider lässt sich damit keine Sortierung innerhalb einer Baumebene erreichen (angenommen under ID 2 sind 3 "Childs". Dann kann man die Reihenfolge dieser Nodes eben so nicht ändern.) Abhilfe würde eine weitere Spalte mit einer Art "SortOrder" schaffen.
Nur wie sortiert man einen Baum ? Rekursiv jeden Unterknoten ? Gibt es da Codebeispiele ?

Gruß

S
127 Beiträge seit 2004
vor 18 Jahren

Hallo amorph,

Die Sortierungssplate ist meiner Meinung nicht notwendig, da man das auch schon mit dem SQL-Statement machen

Select .... From .... [Where...] Order by Bezeichnung -> das Sortiert Bezeichnung von A nach Z

Select .... From .... [Where...] Order by Bezeichnung Desc -> das Sortiet Bezeichnung von Z nach A

Und jenach dem was der Benutzer ausgewählt hat holt man sich so die Datensätze. Falls er sich erst entscheidet wenn der Baum schon aufgebaut ist (nach dem er schon Knoten geöffnet hat) dann brauch man ja nur den letzen Knoten neu laden entsprechend wie der Benutzer das will. Dabei sollte man sich aber merken auf welchem Unterknoten er momentan steht um nach dem erneuten aufbauen des Knoten auch wieder den Unterknoten auswählen zu können.

Leider habe ich momentan kein Codebeispiel zur Verfügung.

4.221 Beiträge seit 2005
vor 18 Jahren

Dies wäre auch noch eine Alternative

Rekursiver TreeView Save/Restore aufgrund des FullPaths

Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...

G
131 Beiträge seit 2005
vor 18 Jahren
Q
992 Beiträge seit 2005
vor 18 Jahren

Für eine Sortierung nach hierarchischen Gesichtspunkten kenne ich unter Oracle das Connect By Keyword. Sicherlich gibt es ähnliches bei anderen Datenbanken.