VB:DEV控制元件之TreeList控制元件-獲取TreeList所有Node(遞迴)

MoXan_Mx發表於2020-11-10

本篇文章將介紹獲取TreeList所有Node節點的方法,此處TreeList的資料使用資料來源繫結,為動態獲取,併為TreeList設定comboBox核取方塊,從資料庫中動態選中TreeList的節點

一、首先我們先為TreeList繫結資料來源,並設定KeyFieldName以及ParentFieldName

TreeList1.DataSource = DataTable1
TreeList1.KeyFieldName = "編號"
TreeList1.ParentFieldName = "上級編號"

二、從資料庫中查詢需要將核取方塊勾選的條件或資料,這裡不多贅述,只是呼叫BLL查詢資料庫然後將返回結果放在一個DataTable中。這裡起名為dt明細

三、先遍歷第一層TreeList

For i As Integer = 0 To TreeList1.Rows.Count - 1
      For j As Integer = 0 To dt明細.Rows.Count - 1
            If TreeList1.Nodes(i).Item("編號").ToString = dt明細.Rows.Item(j).Item("編號").ToString Then
                  '將節點設定為選中
                  TreeList1.Nodes.Item(i).CheckState = CheckState.Checked
                  Exit For
            End If
      Next j
      '呼叫遞迴函式
      getAllNodes(TreeList1.Nodes(i))
Next i


四、接下來開始編寫遞迴方法getAllNodes()
 

Public Sub getAllNodes(ParentNode As TreeListNode)
      Dim i As Integer = 0
      Try
            'node表示當前節點,用以查詢是否存在下級節點
            For Each node As TreeListNode In ParentNode.Nodes
                  For j As Integer = 0 To dt明細.Rows.Count - 1
                        If TreeList1.Nodes(i).Item("編號").ToString = dt明細.Rows.Item(j).Item("編號").ToString Then
                              '將節點設定為選中
                              TreeList1.Nodes.Item(i).CheckState = CheckState.Checked
                              Exit For
                        End If
                  Next j
                  '判斷是否存在下級節點
                  If node.Nodes.Count > 0 Then
                        '查詢下一級節點
                        getAllNodes(node)
                  End If
                  i = i + 1
             Next
      Catch ex As Exception
            MsgBox(ex.ToString)
      End Try
End Sub


 

以上完成了本篇文章的需求,本人還是程式設計小白,如有錯誤以及更好的方法,希望大家多多指正,感謝您的閱讀

相關文章