Public Class frmStructureNodeConfig Dim DT_ENTITIES As DataTable Private Shared _Instance As frmStructureNodeConfig = Nothing Private setimageNull As Boolean = False Private Property TreeView_ExpandState As String = "Collapse" Public Shared Function Instance() As frmStructureNodeConfig If _Instance Is Nothing OrElse _Instance.IsDisposed = True Then _Instance = New frmStructureNodeConfig End If _Instance.BringToFront() Return _Instance End Function Sub Load_TreeView() Try Try TreeView1.Nodes.Clear() Catch ex As Exception End Try Dim DTNODES As DataTable = DD_DMSDataSet.TBPMO_STRUCTURE_NODES_CONFIGURATION Dim TREEVIEW_IMAGELIST As ImageList TREEVIEW_IMAGELIST = New ImageList For Each row As DataRow In DTNODES.Rows Try Dim bimage = row.Item("NODE_IMAGE") If Not IsDBNull(bimage) Then Dim Node_image = ByteArrayToBitmap(bimage) TREEVIEW_IMAGELIST.Images.Add(row.Item("GUID").ToString, Node_image) End If Catch ex As Exception End Try Next TreeView1.ImageList = TREEVIEW_IMAGELIST ' Presuming the DataTable has a column named ENTITY_ID and TYPE_NODE. Dim expression As String expression = "PARENT_NODE = 0" Dim foundRowsLevel0() As DataRow ' Use the Select method to find all rows matching the filter. foundRowsLevel0 = DTNODES.Select(expression) Dim i As Integer Dim NODE_CONFIG_ID Dim LEVEL0_NODE As TreeNode ' For each row create a Node For i = 0 To foundRowsLevel0.GetUpperBound(0) Dim ID = foundRowsLevel0(i)("GUID") Dim nodetext = foundRowsLevel0(i)("NAME") Dim Type_node = foundRowsLevel0(i)("TYPE_NODE") LEVEL0_NODE = New TreeNode(nodetext) LEVEL0_NODE.Tag = ID Dim index As Integer = 0 For Each img As String In TREEVIEW_IMAGELIST.Images.Keys If img = ID Then Exit For End If index += 1 Next LEVEL0_NODE.ImageIndex = index LEVEL0_NODE.SelectedImageIndex = index '### LEVEL 1 laden ####### Dim expressionLevel1 As String expressionLevel1 = "PARENT_NODE = " & ID 'TYPE_NODE = 1 AND Einschränkung auf Type 2 und PARENT_NODE Dim foundRowsLevel1() As DataRow foundRowsLevel1 = DTNODES.Select(expressionLevel1, "TYPE_NODE") Dim j As Integer For j = 0 To foundRowsLevel1.GetUpperBound(0) Dim ID1 = foundRowsLevel1(j)("GUID") Dim nodetext1 = foundRowsLevel1(j)("NAME") Dim Type_node1 = foundRowsLevel1(j)("TYPE_NODE") ' Node erstellen.. Dim LEVEL1_NODE As TreeNode LEVEL1_NODE = New TreeNode(nodetext1) LEVEL1_NODE.Tag = ID1 index = 0 For Each img As String In TREEVIEW_IMAGELIST.Images.Keys If img = ID1 Then Exit For End If index += 1 Next LEVEL1_NODE.ImageIndex = index LEVEL1_NODE.SelectedImageIndex = index ' ..und einfügen LEVEL0_NODE.Nodes.Add(LEVEL1_NODE) '### LEVEL 2 laden ####### Dim expressionLevel2 As String expressionLevel2 = "PARENT_NODE = " & ID1 'TYPE_NODE = 2 AND Einschränkung auf Type und PARENT_NODE Dim foundRowsLevel2() As DataRow foundRowsLevel2 = DTNODES.Select(expressionLevel2, "TYPE_NODE") Dim k As Integer For k = 0 To foundRowsLevel2.GetUpperBound(0) Dim ID2 = foundRowsLevel2(k)("GUID") Dim nodetext2 = foundRowsLevel2(k)("NAME") ' Node erstellen.. Dim LEVEL2_NODE As TreeNode LEVEL2_NODE = New TreeNode(nodetext2) LEVEL2_NODE.Tag = ID2 index = 0 For Each img As String In TREEVIEW_IMAGELIST.Images.Keys If img = ID2 Then Exit For End If index += 1 Next LEVEL2_NODE.ImageIndex = index LEVEL2_NODE.SelectedImageIndex = index ' ..und einfügen LEVEL1_NODE.Nodes.Add(LEVEL2_NODE) '### LEVEL 3 laden ####### Dim expressionLevel3 As String expressionLevel3 = "PARENT_NODE = " & ID2 Dim foundRowsLevel3() As DataRow foundRowsLevel3 = DTNODES.Select(expressionLevel3, "TYPE_NODE") Dim l As Integer For l = 0 To foundRowsLevel3.GetUpperBound(0) Dim ID3 = foundRowsLevel3(l)("GUID") Dim nodetext3 = foundRowsLevel3(l)("NAME") ' Node erstellen.. Dim LEVEL3_NODE As TreeNode LEVEL3_NODE = New TreeNode(nodetext3) LEVEL3_NODE.Tag = ID3 index = 0 For Each img As String In TREEVIEW_IMAGELIST.Images.Keys If img = ID3 Then Exit For End If index += 1 Next LEVEL3_NODE.ImageIndex = index LEVEL3_NODE.SelectedImageIndex = index ' ..und einfügen LEVEL2_NODE.Nodes.Add(LEVEL3_NODE) '### LEVEL 4 laden ####### Dim expressionLevel4 As String expressionLevel4 = "PARENT_NODE = " & ID3 Dim foundRowsLevel4() As DataRow foundRowsLevel4 = DTNODES.Select(expressionLevel4, "TYPE_NODE") Dim m As Integer For m = 0 To foundRowsLevel4.GetUpperBound(0) Dim ID5 = foundRowsLevel4(m)("GUID") Dim nodetext5 = foundRowsLevel4(m)("NAME") ' Node erstellen.. Dim LEVEL4_NODE As TreeNode LEVEL4_NODE = New TreeNode(nodetext5) LEVEL4_NODE.Tag = ID5 index = 0 For Each img As String In TREEVIEW_IMAGELIST.Images.Keys If img = ID5 Then Exit For End If index += 1 Next LEVEL4_NODE.ImageIndex = index LEVEL4_NODE.SelectedImageIndex = index ' ..und einfügen LEVEL3_NODE.Nodes.Add(LEVEL4_NODE) '### LEVEL 5 laden ####### Dim expressionLevel5 As String Dim sortExp As String = "TYPE_NODE" expressionLevel5 = "PARENT_NODE = " & ID5 'TYPE_NODE = 5 AND Einschränkung auf Type und PARENT_NODE Dim foundRowsLevel5() As DataRow foundRowsLevel5 = DTNODES.Select(expressionLevel5, sortExp) Dim n As Integer If ID5 = 1146 Then Console.WriteLine("Aha") End If For n = 0 To foundRowsLevel5.GetUpperBound(0) Dim ID6 = foundRowsLevel5(n)("GUID") Dim nodetext6 = foundRowsLevel5(n)("NAME") ' Node erstellen.. Dim LEVEL5_NODE As TreeNode LEVEL5_NODE = New TreeNode(nodetext6) LEVEL5_NODE.Tag = ID6 index = 0 For Each img As String In TREEVIEW_IMAGELIST.Images.Keys If img = ID6 Then Exit For End If index += 1 Next LEVEL5_NODE.ImageIndex = index LEVEL5_NODE.SelectedImageIndex = index ' ..und einfügen LEVEL4_NODE.Nodes.Add(LEVEL5_NODE) '### LEVEL 5 laden ####### Dim expressionLevel6 As String expressionLevel6 = "PARENT_NODE = " & ID6 'TYPE_NODE = 6 AND Einschränkung auf Type und PARENT_NODE Dim foundRowsLevel6() As DataRow foundRowsLevel6 = DTNODES.Select(expressionLevel6, sortExp) If ID6 = 1146 Then Console.WriteLine("Aha") End If Dim o As Integer For o = 0 To foundRowsLevel6.GetUpperBound(0) Dim ID7 = foundRowsLevel6(o)("GUID") Dim nodetext7 = foundRowsLevel6(o)("NAME") ' Node erstellen.. Dim LEVEL6_NODE As TreeNode LEVEL6_NODE = New TreeNode(nodetext7) LEVEL6_NODE.Tag = ID7 index = 0 For Each img As String In TREEVIEW_IMAGELIST.Images.Keys If img = ID7 Then Exit For End If index += 1 Next LEVEL6_NODE.ImageIndex = index LEVEL6_NODE.SelectedImageIndex = index ' ..und einfügen LEVEL5_NODE.Nodes.Add(LEVEL6_NODE) '### LEVEL 7 laden ####### Dim expressionLevel7 As String expressionLevel7 = "PARENT_NODE = " & ID7 'TYPE_NODE = 7 AND Einschränkung auf Type und PARENT_NODE Dim foundRowsLevel7() As DataRow foundRowsLevel7 = DTNODES.Select(expressionLevel7, sortExp) Dim p As Integer For p = 0 To foundRowsLevel7.GetUpperBound(0) Dim ID8 = foundRowsLevel7(p)("GUID") Dim nodetext8 = foundRowsLevel7(p)("NAME") ' Node erstellen.. Dim LEVEL7_NODE As TreeNode LEVEL7_NODE = New TreeNode(nodetext8) LEVEL7_NODE.Tag = ID8 index = 0 For Each img As String In TREEVIEW_IMAGELIST.Images.Keys If img = ID8 Then Exit For End If index += 1 Next LEVEL7_NODE.ImageIndex = index LEVEL7_NODE.SelectedImageIndex = index ' ..und einfügen LEVEL6_NODE.Nodes.Add(LEVEL7_NODE) '### LEVEL 7 laden ####### Dim expressionLevel8 As String expressionLevel8 = "PARENT_NODE = " & ID8 'TYPE_NODE = 7 AND Einschränkung auf Type und PARENT_NODE Dim foundRowsLevel8() As DataRow foundRowsLevel8 = DTNODES.Select(expressionLevel8, sortExp) Dim q As Integer For q = 0 To foundRowsLevel8.GetUpperBound(0) Dim ID9 = foundRowsLevel8(q)("GUID") Dim nodetext9 = foundRowsLevel8(q)("NAME") ' Node erstellen.. Dim LEVEL8_NODE As TreeNode LEVEL8_NODE = New TreeNode(nodetext9) LEVEL8_NODE.Tag = ID9 index = 0 For Each img As String In TREEVIEW_IMAGELIST.Images.Keys If img = ID9 Then Exit For End If index += 1 Next LEVEL8_NODE.ImageIndex = index LEVEL8_NODE.SelectedImageIndex = index ' ..und einfügen LEVEL7_NODE.Nodes.Add(LEVEL8_NODE) '### LEVEL 8 laden ####### Next ' Level 7 Ende Next ' Level 7 Ende Next ' Level 6 Ende Next ' Level 5 Ende Next 'Level 4 Ende Next 'Level 3 Ende Next ' Level 2 Ende Next 'Level 1 Ende TreeView1.Nodes.Add(LEVEL0_NODE) Next TreeView1.ExpandAll() Catch ex As Exception MsgBox("Unexpected Error in Load treeView: " & ex.Message, MsgBoxStyle.Critical) End Try End Sub Private Function Save_Config() Try Me.TBPMO_STRUCTURE_NODES_CONFIGURATIONBindingSource.EndEdit() If DD_DMSDataSet.TBPMO_STRUCTURE_NODES_CONFIGURATION.GetChanges Is Nothing = False Then Me.CHANGED_WHOTextBox.Text = USER_USERNAME TBPMO_STRUCTURE_NODES_CONFIGURATIONTableAdapter.Update(DD_DMSDataSet.TBPMO_STRUCTURE_NODES_CONFIGURATION) bsitmSave.Caption = "Successfully saved - " & Now bsitmSave.Visibility = DevExpress.XtraBars.BarItemVisibility.Always GroupBoxNodeIcon.Enabled = True Else bsitmSave.Visibility = DevExpress.XtraBars.BarItemVisibility.Never End If Return True Catch ex As Exception MsgBox("Error in Saving Configuration:" & vbNewLine & ex.Message) Return False End Try End Function Private Sub frmStructureNodeConfig_Load(sender As Object, e As EventArgs) Handles MyBase.Load Try Me.TBWH_ENTITYTableAdapter.Connection.ConnectionString = MYDB_ECM.CurrentConnectionString Me.TBWH_ENTITYTableAdapter.Fill(Me.DD_DMSDataSet.TBWH_ENTITY, USER_LANGUAGE) Me.TBPMO_STRUCTURE_NODES_CONFIGURATIONTableAdapter.Connection.ConnectionString = MYDB_ECM.CurrentConnectionString Me.TBPMO_FORM_CONSTRUCTORTableAdapter.Connection.ConnectionString = MYDB_ECM.CurrentConnectionString Me.TBPMO_FORM_CONSTRUCTORTableAdapter.Fill(Me.DD_ECMAdmin.TBPMO_FORM_CONSTRUCTOR, USER_LANGUAGE, CURRENT_SCREEN_ID) Catch ex As Exception MsgBox("Error in Loading Configuration:" & vbNewLine & ex.Message) End Try End Sub Private Sub TBPMO_STRUCTURE_NODES_CONFIGURATIONBindingSource_AddingNew(sender As Object, e As System.ComponentModel.AddingNewEventArgs) Handles TBPMO_STRUCTURE_NODES_CONFIGURATIONBindingSource.AddingNew DD_DMSDataSet.TBPMO_STRUCTURE_NODES_CONFIGURATION.ADDED_WHOColumn.DefaultValue = USER_USERNAME End Sub Private Sub btnSelectBackground_Click(sender As Object, e As EventArgs) Handles btnSelectBackground.Click Try If Me.GUIDTextBox.Text = "" Then MsgBox("Please choose a node by clicking in the treeview!", MsgBoxStyle.Exclamation) Exit Sub End If OpenFileDialog1.Filter = "PNG Bilder|*.png" If OpenFileDialog1.ShowDialog() = System.Windows.Forms.DialogResult.OK Then Dim path As String = OpenFileDialog1.FileName pbBackground.ImageLocation = path If Save_Config() = True Then ' Hintergrund speichern Dim image As Bitmap = Nothing Dim bimage() As Byte = Nothing If pbBackground.ImageLocation IsNot Nothing Then image = CType(Drawing.Image.FromFile(pbBackground.ImageLocation, True), Bitmap) bimage = BitmapToByteArray(image) Dim sql As String = String.Format("UPDATE TBPMO_STRUCTURE_NODES_CONFIGURATION SET NODE_IMAGE = @Image WHERE GUID = {0}", Me.GUIDTextBox.Text) Dim conn As New SqlClient.SqlConnection(MyConnectionString) Dim cmd As New SqlClient.SqlCommand(sql, conn) cmd.Parameters.Add("@Image", SqlDbType.VarBinary).Value = bimage conn.Open() cmd.ExecuteNonQuery() conn.Close() LoadData() End If End If End If Catch ex As Exception MsgBox("Error in Setting NodeImage:" & vbNewLine & ex.Message) End Try End Sub Private Sub btnResetBackground_Click(sender As Object, e As EventArgs) Handles btnResetBackground.Click Try Me.setimageNull = True pbBackground.ImageLocation = Nothing pbBackground.Image = Nothing Dim sql As String = String.Format("UPDATE TBPMO_STRUCTURE_NODES_CONFIGURATION SET NODE_IMAGE IS NULL WHERE GUID = {0}", Me.GUIDTextBox.Text) If MYDB_ECM.ExecuteNonQuery(SQL) = True Then setimageNull = False End If Catch ex As Exception MsgBox("Error in Deleting NodeImage:" & vbNewLine & ex.Message) End Try End Sub Sub Load_Image() If GUIDTextBox.Text <> "" Then Try pbBackground.ImageLocation = Nothing pbBackground.Image = Nothing Dim sql = "SELECT NODE_IMAGE FROM TBPMO_STRUCTURE_NODES_CONFIGURATION WHERE GUID = " & GUIDTextBox.Text Dim img = MYDB_ECM.GetScalarValue(SQL) ' Hintergrundbild unwandeln und anzeigen If IsNothing(img) Then Exit Sub End If If Not IsDBNull(img) Then Dim bimage() As Byte = img Dim image = ByteArrayToBitmap(bimage) Me.pbBackground.Image = image End If Catch ex As Exception MsgBox("Error in Getting NodeImage:" & vbNewLine & ex.Message, MsgBoxStyle.Critical) End Try End If End Sub Private Sub frmStructureNodeConfig_Shown(sender As Object, e As EventArgs) Handles Me.Shown Load_Image() If cmbEntity.Items.Count > 0 Then cmbEntity.SelectedIndex = 0 LoadData() End If End Sub Private Sub TreeView1_AfterSelect(sender As Object, e As TreeViewEventArgs) Handles TreeView1.AfterSelect Try Dim SelectedNode As TreeNode = TryCast(TreeView1.SelectedNode, TreeNode) If SelectedNode IsNot Nothing Then Dim ID = SelectedNode.Tag If IsNumeric(ID) Then TBPMO_STRUCTURE_NODES_CONFIGURATIONBindingSource.Filter = "GUID = " & ID Load_Image() End If End If Me.bsitmSave.Visibility = DevExpress.XtraBars.BarItemVisibility.Never Catch ex As Exception MsgBox("Error in TreeView.AfterSelect:" & vbNewLine & ex.Message, MsgBoxStyle.Critical) End Try End Sub Private Sub cmbEntity_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cmbEntity.SelectedIndexChanged LoadData() End Sub Private Sub LoadData() If cmbEntity.SelectedIndex <> -1 Then Load_Nodes_entity If DD_DMSDataSet.TBPMO_STRUCTURE_NODES_CONFIGURATION.Rows.Count > 0 Then Load_TreeView() Else TreeView1.Nodes.Clear() End If If TYPE_NODENumericUpDown.Value = 1000 Then CheckEdit1.Checked = True TYPE_NODENumericUpDown.Enabled = False Else CheckEdit1.Checked = False TYPE_NODENumericUpDown.Enabled = True End If End If End Sub Sub Load_nodes_Entity() Me.TBPMO_STRUCTURE_NODES_CONFIGURATIONTableAdapter.Fill(Me.DD_DMSDataSet.TBPMO_STRUCTURE_NODES_CONFIGURATION, cmbEntity.SelectedValue) End Sub Private Sub BindingNavigatorDeleteItem_Click(sender As Object, e As EventArgs) End Sub Private Sub BarButtonItem1_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles BarButtonItem1.ItemClick Try Dim oParentID = GUIDTextBox.Text Dim oEntity = cmbEntity.SelectedValue If oParentID = "" Then oParentID = 0 End If Dim NewAddForm As New frmNodeConfigAdd(oParentID, cmbEntity.SelectedValue, cmbEntity.Text) NewAddForm.ShowDialog() Load_nodes_Entity() LoadData() Catch ex As Exception MsgBox("Error in Adding Node:" & vbNewLine & ex.Message, MsgBoxStyle.Critical) End Try End Sub Private Sub BarButtonItem2_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles BarButtonItem2.ItemClick Save_Config() End Sub Private Sub BarButtonItem3_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles BarButtonItem3.ItemClick If TreeView_ExpandState = "Collapse" Then TreeView1.CollapseAll() TreeView_ExpandState = "Expand" Else TreeView1.ExpandAll() TreeView_ExpandState = "Collapse" End If End Sub Private Sub CheckEdit1_CheckedChanged(sender As Object, e As EventArgs) Handles CheckEdit1.CheckedChanged If CheckEdit1.Checked Then If TYPE_NODENumericUpDown.Value <> 1000 Then TYPE_NODENumericUpDown.Value = 1000 End If TYPE_NODENumericUpDown.Enabled = False Else TYPE_NODENumericUpDown.Enabled = True End If End Sub Private Sub TYPE_NODENumericUpDown_ValueChanged(sender As Object, e As EventArgs) Handles TYPE_NODENumericUpDown.ValueChanged If TYPE_NODENumericUpDown.Value = 1000 Then CheckEdit1.Checked = True Else CheckEdit1.Checked = False End If End Sub End Class