Imports DevExpress.XtraTreeList Imports DevExpress.XtraTreeList.Columns Imports DevExpress.XtraTreeList.Nodes.Operations Imports DevExpress.XtraTreeList.Nodes Imports DevExpress.XtraSplashScreen Imports System.Threading Public Class frmNodeNavigation Dim DTNODES As DataTable Private RunningTask As Task Private RunningTaskTokenSource As New CancellationTokenSource Private RunningTaskToken = RunningTaskTokenSource.Token Private Sub frmNodeNavigation_Load(sender As Object, e As EventArgs) Handles Me.Load Load_nodes() End Sub Async Function Load_nodes() As Threading.Tasks.Task Dim oHandle = SplashScreenManager.ShowOverlayForm(Me) Try Dim oToken = RunningTaskTokenSource.Token Dim Sql = String.Format("select T.GUID,T.RECORD_ID, T.NODE_CONFIG_ID,T.NODE_CAPTION,T.ID1, T.BACK_COLOR,T.PARENT_GUID from VWPMO_STRUCTURE_NODES T INNER JOIN VWPMO_CONSTRUCTOR_FORMS T1 ON T.ENTITY_ID = T1.FORM_ID WHERE T1.CONSTRUCT_ID = {0}", 1) DTNODES = ClassDatabase.Return_Datatable(Sql, True) Sql = String.Format("select T.* from TBPMO_STRUCTURE_NODES_CONFIGURATION T INNER JOIN VWPMO_CONSTRUCTOR_FORMS T1 ON T.ENTITY_ID = T1.FORM_ID WHERE T1.CONSTRUCT_ID = {0}", 1) Dim DT_TREEVIEW_CONFIGURATION = ClassDatabase.Return_Datatable(Sql) For Each row As DataRow In DT_TREEVIEW_CONFIGURATION.Rows Try Dim bimage = row.Item("NODE_IMAGE") If Not IsDBNull(bimage) Then Dim Node_image = ByteArrayToBitmap(bimage) ImageCollection1.AddImage(Node_image, row.Item("GUID")) End If Catch ex As Exception End Try Next TreeListDevexpress.DataSource = DTNODES TreeListDevexpress.KeyFieldName = "GUID" TreeListDevexpress.ParentFieldName = "PARENT_GUID" TreeListDevexpress.StateImageList = ImageCollection1 Try TreeListDevexpress.Columns.ColumnByName("colRECORD_ID").Visible = False Catch ex As Exception End Try Try TreeListDevexpress.Columns.ColumnByName("colNODE_CONFIG_ID").Visible = False Catch ex As Exception End Try Try TreeListDevexpress.Columns.ColumnByName("colBACK_COLOR").Visible = False TreeListDevexpress.Columns.ColumnByName("colID1").Visible = False Catch ex As Exception End Try Catch ex As Exception Finally SplashScreenManager.CloseOverlayForm(oHandle) End Try End Function Private Sub TreeListDevexpress_GetStateImage(sender As Object, e As DevExpress.XtraTreeList.GetStateImageEventArgs) Dim Column_Config_ID As DevExpress.XtraTreeList.Columns.TreeListColumn = TreeListDevexpress.Columns("NODE_CONFIG_ID") Dim configid = e.Node.GetDisplayText(Column_Config_ID) e.Node.StateImageIndex = ImageCollection1.Images.Keys.IndexOf(configid) End Sub Private Sub TreeListDevexpress_ColumnFilterChanged(sender As Object, e As EventArgs) Dim tree As TreeList = TryCast(sender, TreeList) Dim filteredColumns As List(Of TreeListColumn) = tree.Columns.Cast(Of TreeListColumn)().Where(Function(c) c.FilterInfo.AutoFilterRowValue IsNot Nothing).ToList() If filteredColumns.Count = 0 Then tree.CollapseAll() Return End If tree.BeginUpdate() For Each col As TreeListColumn In filteredColumns Dim op As New CollapseChildrenOperation(col.FilterInfo.AutoFilterRowValue.ToString(), col) tree.NodesIterator.DoOperation(op) Next col tree.EndUpdate() End Sub Public Class CollapseChildrenOperation Inherits TreeListOperation Private filterValue As String Private column As TreeListColumn Public Sub New(ByVal filter As String, ByVal col As TreeListColumn) filterValue = filter column = col End Sub Private Function IsNodeMatchFilter(ByVal node As TreeListNode, ByVal column As TreeListColumn) As Boolean Return node.GetDisplayText(column).Contains(filterValue) End Function Public Overrides Sub Execute(ByVal node As TreeListNode) If IsNodeMatchFilter(node, column) Then node.TreeList.MakeNodeVisible(node) CollapseChildren(node) End If End Sub Public Sub CollapseChildren(ByVal node As TreeListNode) 'node.Visible = true; For Each childNode As TreeListNode In node.Nodes CollapseChildren(childNode) Next childNode node.Expanded = False End Sub End Class Private Sub TreeListDevexpress_FocusedNodeChanged(sender As Object, e As FocusedNodeChangedEventArgs) Handles TreeListDevexpress.FocusedNodeChanged For Each treeListNode As DevExpress.XtraTreeList.Nodes.TreeListNode In TreeListDevexpress.Selection Dim oID = treeListNode.Id Dim PID = treeListNode.ParentNode Console.WriteLine(oID) Next End Sub End Class