Imports C1.Win.C1TrueDBGrid Imports System Imports System.Data Imports System.Data.SqlTypes Imports System.Data.SqlClient Public Class Form2 Dim xvertragspartnernr As String = 2 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim dt As New DataTable dt = Me.Get_SubStruktur(0, 2, 1) Me.ComboBoxTree1.TreeView.Nodes.Clear() Me.ComboBoxTree1.TreeView.Nodes.Add("Test") Me.Update_Node(dt, Me.ComboBoxTree1.TreeView.Nodes(0), "Vertragspartner", 1) Me.ComboBoxTree1.TreeView.ExpandAll() End Sub ''' ''' Parent-Beziehung herstellen und Struktur abfüllen ''' ''' ''' ''' Private Sub Update_Node(ByVal oSourceData As DataTable, ByRef node As TreeNode, ByVal type As String, ByVal Details As Integer) If Not (oSourceData Is Nothing) Then Dim oView As DataView = oSourceData.DefaultView Dim oTable As DataTable = oView.Table Dim oDS As DataSet = New DataSet() oDS.Tables.Add(oTable.Copy()) If oDS.Relations.Contains("SelfRefenceRelation") = False Then oDS.Relations.Add("SelfRefenceRelation", _ oDS.Tables(0).Columns("Vertragselementnr"), _ oDS.Tables(0).Columns("Parentid")) End If oTable.Dispose() oTable = Nothing LoadNode(oDS, node, type, Details) oDS.Dispose() oDS = Nothing End If End Sub ''' ''' Tree aufbauen ''' ''' Input-Dataset ''' Aktueller Node ''' Type Vertragspartner oder Vertragstyp ''' Private Sub LoadNode(ByVal oDS As DataSet, ByRef oNode As TreeNode, ByVal type As String, ByVal Details As Integer) 'Dim oTreeView As TreeView = New TreeView() Dim oDataRow As DataRow For Each oDataRow In oDS.Tables(0).Rows If Not oDataRow.IsNull("Parentid") Then If oDataRow.Item("Parentid") = 0 Then 'If oDataRow.IsNull("Parentid") Then Dim oNode1 As New TreeNode() oNode1.Text = oDataRow("Bezeichnung").ToString() Select Case type Case "Vertragspartner" oNode1.Tag = New Treenode_Descriptor("Vertragstyp", oDataRow("vertragselementnr").ToString, xVertragspartnernr, oDataRow("vertragstypnr").ToString) oNode1.ImageIndex = 1 oNode1.SelectedImageIndex = 1 oNode1.StateImageIndex = 1 Case "Vertragstyp" If oDataRow("aktiv") = True Then oNode1.Tag = New Treenode_Descriptor("Vertragspartner", oDataRow("vertragselementnr").ToString, xVertragspartnernr, oDataRow("vertragstypnr").ToString) oNode1.ImageIndex = 0 oNode1.SelectedImageIndex = 0 oNode1.StateImageIndex = 0 Else oNode1.Tag = New Treenode_Descriptor("Vertragspartner", oDataRow("vertragselementnr").ToString, xVertragspartnernr, oDataRow("vertragstypnr").ToString) oNode1.ImageIndex = 4 oNode1.SelectedImageIndex = 4 oNode1.StateImageIndex = 4 End If End Select oNode.Nodes.Add(oNode1) RecursivelyLoadNode(oDataRow, oNode1, type, Details) End If End If Next oDataRow oDS.Dispose() oDS = Nothing End Sub ''' ''' Child-Nodes hinzufügen ''' ''' ''' ''' Private Sub RecursivelyLoadNode(ByVal oDataRow As DataRow, ByRef oNode As TreeNode, ByVal type As String, ByVal Details As Integer) Dim oChildRow As DataRow For Each oChildRow In oDataRow.GetChildRows("SelfRefenceRelation") Dim oChildNode As New TreeNode() oChildNode.Text = oChildRow("Bezeichnung").ToString() oChildNode.Tag = New Treenode_Descriptor("Vertragselement", oChildRow("Vertragselementnr").ToString(), xVertragspartnernr, oDataRow("vertragstypnr").ToString) oChildNode.ImageIndex = 2 oChildNode.SelectedImageIndex = 2 oChildNode.StateImageIndex = 2 oNode.Nodes.Add(oChildNode) RecursivelyLoadNode(oChildRow, oChildNode, type, Details) Next oChildRow End Sub ''' ''' Laden der Substruktur ''' ''' Nummer des aktuellen Vertragspartners ''' ''' Private Function Get_SubStruktur(ByVal vertragstypnr As Integer, ByVal Vertragspartnernr As Integer, ByVal Details_anzeigen As Integer) As DataTable Dim scmCmdToExecute As SqlCommand = New SqlCommand() Dim dtToReturn As DataTable = New DataTable() Dim sdaAdapter As SqlDataAdapter = New SqlDataAdapter(scmCmdToExecute) scmCmdToExecute.CommandText = "dbo.sp_vertragsuebersicht_get_struktur" scmCmdToExecute.CommandType = CommandType.StoredProcedure scmCmdToExecute.Connection = conn.scoDBConnection Try scmCmdToExecute.Parameters.Add(New SqlParameter("@vertragstypnr", SqlDbType.Int, 4, ParameterDirection.Input, True, 10, 0, "", DataRowVersion.Proposed, vertragstypnr)) scmCmdToExecute.Parameters.Add(New SqlParameter("@vertragspartnernr", SqlDbType.Int, 4, ParameterDirection.Input, True, 10, 0, "", DataRowVersion.Proposed, Vertragspartnernr)) scmCmdToExecute.Parameters.Add(New SqlParameter("@mitarbeiternr", SqlDbType.Int, 4, ParameterDirection.Input, True, 10, 0, "", DataRowVersion.Proposed, Globals.clsmitarbeiter.iMitarbeiternr.Value)) scmCmdToExecute.Parameters.Add(New SqlParameter("@Details", SqlDbType.Int, 4, ParameterDirection.Input, True, 10, 0, "", DataRowVersion.Proposed, Details_anzeigen)) sdaAdapter.Fill(dtToReturn) Return dtToReturn Catch ex As Exception Throw New Exception("clsVertragsuebersicht::" & scmCmdToExecute.CommandText & "::Error occured." & ex.Message, ex) Finally scmCmdToExecute.Dispose() sdaAdapter.Dispose() End Try End Function Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load End Sub End Class ''' ''' Treenode-Descriptor zur Befüllung des Tree-Node-Tags ''' ''' Treenode-Tags werden mit den 2 Elementen (Type und Keyvalue) befüllt: ''' Type: Vertragspartner, Vertragstyp ''' Keyvalue: Primary-Key des Elementes Public Class Treenode_Descriptor Dim m_type As String Property Type() As String Get Return m_type End Get Set(ByVal value As String) m_type = value End Set End Property Dim m_keyvalue As Integer Property Keyvalue() As Integer Get Return m_keyvalue End Get Set(ByVal value As Integer) m_keyvalue = value End Set End Property Dim m_vertragspartnernr As Integer Property Vertragspartnernr() As Integer Get Return m_vertragspartnernr End Get Set(ByVal value As Integer) m_vertragspartnernr = value End Set End Property Dim m_vertragstypnr As Integer Property Vertragstypnr() As Integer Get Return m_vertragstypnr End Get Set(ByVal value As Integer) m_vertragstypnr = value End Set End Property Sub New(ByVal Type As String, ByVal Keyvalue As Integer, ByVal Vertragspartnernr As Integer, ByVal vertragstypnr As Integer) Me.Type = Type Me.Keyvalue = Keyvalue Me.Vertragspartnernr = Vertragspartnernr Me.Vertragstypnr = vertragstypnr End Sub End Class