Hab ich auch so gemacht. Eine Funktion die sich aufruft (bzw. habe ich noch eine für die Hauptknotenpunkte vorangestellt) und das aktuelle Element an genau diese übergibt. Darin wird dann ein neues Element angelegt und wenn es weiter verschachtelt werden soll, dann wird das gerade erstellte Element weitergegeben usw.
Wiso soll das nicht elegant sein?
Der Code bleibt dabei doch recht übersichtlich, oder?
Bei mir sieht das so aus '''<summary>
''' Diese Funktion erstellt die Hauptknotenpunkte des
' Treeviews
''' anhand der gegebenen Tabelle. Die Unterpunkte werden
' durch den
''' aufruf der gleichnamigen Überschreibung dieser Funktion
' erstellt,
''' welche innerhalb dieser Funktion aufgerufen wird.
''' Die Tabelle, auf welcher die Funktion basiert besitzt
' ein ID-Feld
''' und ein ParentID-Feld.
''' Die Werte des ParentID-Feldes beziehen sich auf die ID
' der selben Tabelle.
'''
'''*** Achtung: 'Prüfen und anpassen (sehr performancelastig) (Set _
Table)
'''</summary>
Private Sub InitTree()
If Me.InvokeRequired Then
Dim dd As New MeDelegate(AddressOf InitTree)
Me.Invoke(dd, New Object() {})
Else
If Me.UltraTree1.InvokeRequired = True Then
Dim dd As New MeDelegate(AddressOf InitTree)
Me.UltraTree1.Invoke(dd, New Object() {})
Else
Try
Dim childNode As New _
Infragistics.Win.UltraWinTree.UltraTreeNode
Dim dv As New DataView
Try
dv.Table = _
cup_System.cls_System_Global.DS_System_Help.tblHelp
dv.RowFilter = "ParentID ='" & -1 & "'"
dv.Sort = "IndexNumber"
Catch ex As Exception
Me.Co_SystemComponent1.ErrorMail(Me.Name, New _
StackFrame().GetMethod().Name, ex, "1", False, True, _
False, False)
End Try
For i As Integer = 0 To dv.Count - 1
Try
childNode = New _
Infragistics.Win.UltraWinTree.UltraTreeNode
'*** Aufruf der Überschreibung um untergeordnete
' Nodes zu erstellen.
childNode = InitTree(childNode, CType(dv.Item( _
i).Item("ID"), Integer))
childNode.Key = dv.Item(i).Item( _
"IndexDescription").ToString
childNode.Text = dv.Item(i).Item( _
"IndexDescription").ToString
If childNode.Nodes.Count > 0 Then
childNode.LeftImages.Add(Me.PictureBox1.Image)
End If
Me.UltraTree1.Nodes.Add(childNode)
Catch ex As System.ArgumentException
'Do nothing
'Tritt ein durch me.ShowInTaskbar von frmMain_Load
'Key already exists, key: Index
Catch ex As Exception
Me.Co_SystemComponent1.ErrorMail(Me.Name, New _
StackFrame().GetMethod().Name, ex, "2", False, _
True, False, False)
End Try
Next
Catch ex As Exception
End Try
End If
End If
End Sub |