Anzeige

 [vb.net] Treeview aus Tabelle erstellen


#1
Hallo zusammen,

ich habe ein Datagridview welches Daten aus einer MSSQL-DB ausliest. Aus dem DGV soll nun ein Treeview generiert werden (dass das auch über das Dataset geht, weiß ich)

Die DB stellt die Daten im Kern so zur Verfügung. ROWVERWEIS ist immer die ROWID des Vorgängers

ROWID BESCHREIBUNG ROWVERWEIS
1 erster Level 0
2 erster Level1 0
3 zweiter Level 1
4 zweiter Level 2
5 dritter Level 4

Theoretisch sind unendlich viele Nodes möglich.
Die erste Ebene bekomme ich ja noch hin, in dem ich ein Node erstelle, wenn ROWVERWEIS = 0, aber dann verstehe ich es nicht mehr. Wie erzeuge ich genau die darunterliegenden Nodes?
Ich habe versucht mit den Indizes zu arbeiten, aber das klappt nicht, da der Index pro Stufe wieder bei 0 beginnt.
Dann habe ich versucht, den Index aus Tabelle zu verwenden, und diesen als IndexNode zu setzen, aber den Index kann man wohl nicht selber setzen.
 
#2
nach langem hin und her, hier nun eine Lösung:
ROWVORGANGPOSSTL = die eindeutige ID der Datenzeile
ARTTEXT = Text der Datenzeile
ROWVERWEIS = ID des Vorgängers
dt = datatable mit den Daten

Code:
Public Sub FillTreeView(ByVal dt As DataTable, tv As TreeView)

tv.BeginUpdate()


Dim Tn As TreeNode
For r = 0 To dt.Rows.Count - 1
Tn = New TreeNode(dt(r)("ARTTEXT").ToString) ' & dt(r)("ROWVORGANGPOSSTL"))
Tn.Tag = (dt(r)("ROWVORGANGPOSSTL").ToString)

If (dt(r)("ROWVERWEIS")) = 0 Then

tv.Nodes.Add(Tn)

End If

FillTreeNode_Sub(Tn, dt, (dt(r)("ROWVORGANGPOSSTL")))

Next

tv.EndUpdate()

End Sub


Public Sub FillTreeNode_Sub(ByRef tn As TreeNode, ByRef dt As DataTable, ByVal ID As Integer)
Dim foundRows() As DataRow = dt.Select("ROWVERWEIS = " + ID.ToString)

Dim Tn_Sub As TreeNode
For _r = 0 To foundRows.Count - 1
Tn_Sub = New TreeNode(foundRows(_r)("ARTTEXT").ToString) '& foundRows(_r)("ROWVORGANGPOSSTL").ToString)
Tn_Sub.Tag = (foundRows(_r)("ROWVORGANGPOSSTL").ToString)
tn.Nodes.Add(Tn_Sub)
FillTreeNode_Sub(Tn_Sub, dt, (foundRows(_r)("ROWVORGANGPOSSTL")))
Next

End Sub
 
Anzeige
Anzeige