首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

VB.NET TreeView 節點計數僅回傳第一層:遞迴遍歷所有層級節點

     編輯:程式設計綜合問答

問題:TreeView1.Nodes.Count 僅回傳 1,但視覺上明顯有許多節點。原因在於 Nodes 集合僅包含根節點(第一層),子節點屬於各父節點的 Nodes 屬性,不在頂層集合中。

遞迴遍歷所有節點範例

Private Sub TraverseAndUpdate(node As TreeNode)
    ' 處理當前節點
    Dim k1 As String = node.Name
    Dim TF As String = If(node.Checked, "1", "0")
    
    Dim sql = "UPDATE PrivilegeUser SET puTF = @TF WHERE puRID = @RID AND puPriID = @PriID"
    Using conn As New SqlConnection(connStr), cmd As New SqlCommand(sql, conn)
        cmd.Parameters.AddWithValue("@TF", TF)
        cmd.Parameters.AddWithValue("@RID", TextBox1.Text)
        cmd.Parameters.AddWithValue("@PriID", k1)
        conn.Open()
        cmd.ExecuteNonQuery()
    End Using

    ' 遞迴處理子節點
    For Each child As TreeNode In node.Nodes
        TraverseAndUpdate(child)
    Next
End Sub

' 呼叫入口
Private Sub Button7_Click(...)
    For Each rootNode As TreeNode In TreeView1.Nodes
        TraverseAndUpdate(rootNode)
    Next
End Sub

關鍵改進點

  • 參數化查詢:防止 SQL 注入,修正原代碼字串拼接風險。
  • Using 區塊:確保連線/命令物件正確釋放。
  • 遞迴深度:TreeView 節點層級通常 < 20,棧溢位風險極低;若極深可改用堆疊非遞迴寫法。

常見誤區

以為 TreeView.Nodes 包含所有節點 → 實際僅含根節點。需遞迴或使用 TreeView.GetAllNodes()(自行實作)獲取扁平化列表。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved