TreeView mit vielen Nodes aus Datenbank

28/12/2007 - 18:47 von Markus Schnitzer | Report spam
Hallo,
ich muss ein Artikelgruppenbaum als TreeView darstellen. Die Daten dazu
kommen aus einer Datenbank und jede Gruppe bzw. Untergruppe (Child) bezieht
sich auf eine höhere Gruppe (Mutter).

Datenbank-Tabelle:
Gruppe Name Obergruppe
1 Gruppe 1
2 Gruppe 2 1
3 Gruppe 3 1
4 Gruppe 4 3
5 Gruppe 5 4
6 Gruppe 6

das müsste dann so aussehen:
Gruppe 1
? Gruppe 2
? Gruppe 3
? Gruppe 4
? Gruppe 5
Gruppe 6


Hier kann es zu beliebig tiefen Verschachtelungen kommen.

Wie kann ich das mit VB aufbauen? Komme mit Nodes, Nodes.Add, usw. einfach
nicht weiter.

Danke

Markus@Schnitzer.com
 

Lesen sie die antworten

#1 Bernd Schend
28/12/2007 - 19:44 | Warnen spam
Hallo Markus,

im wesentlichen benötigst du zwei Dinge;

a) Function GetChildren (byval Gruppe as integer) as List (of Integer)
b) Rekursion, um die TreeView-Knoten zu erstellen.

zu a) GetChildren liefert zu einer Gruppe die Kindgruppen
Beispiel:
GetChildren(1) = {2,3)
GetChildren(4) = {5)
GetChildren(6) = nothing

zu b). ich bevorzuge zur Implementierung einen Stack (weniger Overhead
als direkte Rekursion)

Dim NodeStack As New Generic.Stack(Of System.Windows.Forms.TreeNode)

Erzeuge am Anfang den Wurzelknoten (Root) des Treeview (= Gruppe 1)
Lege den Wurzelknoten auf den Stack: NodeStack.Push (Root)
Dann geht's in etwa wie folgt weiter:
whith NodeStack
While .Count > 0
CurrentNode = .Pop()
GroupID = Directcast(.Tag, Integer)
' hier gehe ich davon aus,
' dass die Gruppennumer in der Tag-Property gespeichert ist.
ChildList = GetChildren(GroupID)
If ChildList IsNot Nothing Then
For each i as integer in ChildList
a) Erzeuge einen zugehörigen TreeView-Knoten N
b) .Push(N), Kindknoten auf den Stack legen, damit
dessen Kinder spàter auch noch ermittelt werden.
End If
End While
end with


Gruß
Bernd

P.S.:
Ich habe vereinfachend angenommen, dass es einen einzigen Wurzelknoten
für alle Gruppen gibt, was aber in deinem Fall nicht zutrifft. Auf der
ersten Treeview-Ebene können bei dir mehrere Gruppen auftauchen (im
Beispiel sind dies 1 und 6).
Diesen Fall kriegst du in den Griff, wenn du all diese Knoten
auf den Stack legst, bevor's in die While-Schleife geht.

Ähnliche fragen