某人 select 数据如何从数据库 table 到树视图控件 VB.NET?

How can someone select datat from a database table to a treeview control VB.NET?

VB.NET 我有以下 table 包含数据,如下图所示:

现在,我想将这些数据放入树视图控件中,如另一张图片所示:

请问,我该如何在 VB.NET 中做到这一点? '''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''''''' 这是我最终得到的代码:

Sub LoadTree()
    Dim sql As String = "SELECT Employees.EmpNum , Employees.EmpName , departments.depNum,  departments.depName,  Company.ID, Company.CompName FROM Company INNER JOIN departments ON Company.ID = departments.compNum INNER JOIN  Employees ON departments.depNum = Employees.depNum order by company.compName , departments.depName "
    Dim dt As New DataTable()
    Dim da As New SqlDataAdapter(sql, FrmMain.con)
    da.Fill(dt)

    TreeView1.Nodes.Clear()
    Dim CompanyName As String
    Dim depName As String
    Dim EmpName As String
    Dim tmpCName As String = ""
    Dim tmpDName As String = ""
    Dim sNode As New TreeNode
    Dim ssNode As New TreeNode

    'TreeView1.Nodes.Add("Dhafer")

    For Each dr As DataRow In dt.Rows
        CompanyName = dr("CompName").ToString()
        depName = dr("depName").ToString()
        EmpName = dr("EmpName").ToString()

        If tmpCName = CompanyName Then
            If tmpDName <> depName Then
                TreeView1.SelectedNode.Nodes.Add(depName).Nodes.Add(EmpName)
            End If               
        Else
            tmpCName = CompanyName
            tmpDName = depName
            sNode = TreeView1.Nodes.Add(CompanyName)
            TreeView1.SelectedNode = sNode

            TreeView1.SelectedNode.Nodes.Add(depName).Nodes.Add(EmpName)
        End If

'''''''''''''''''''''''''''''''''''''''''''' ''''''''''''''''''''''''''''

TreeNodes 有一个名称 属性,TreeNodeCollection(treeview.Nodes 或 treenode.Nodes 属性是什么)可以 find nodes based on the Name 所以你的逻辑需要更多喜欢:

For Each dr As DataRow In dt.Rows

    Dim coName = dr("CompName").ToString()
    Dim coNodeId = "co" & dr("ID").ToString()

    'find or create the company node
    Dim nodes = treeview.Nodes.Find(coNodeId, true)
    Dim coNode as TreeNode

    If nodes.Length = 0 Then 'didn't find: create and add
       coNode = New TreeNode() { Name = coNodeId, Text = coName }
       treeview.Nodes.Add(coNode)
    Else 'did find
       coNode = nodes(0)
    End If


    Dim depName = dr("depName").ToString()
    Dim depNodeId = "dep" & dr("depNum").ToString()

    'find or create the dep node under the co node
    nodes = coNode.Nodes.Find(depNodeId, true)
    Dim depNode as TreeNode

    If nodes.Length = 0 Then
       depNode = New TreeNode() { Name = depNodeId, Text = depName }
       coNode.Nodes.Add(depNode)
    Else
       depNode = nodes(0)
    End If


    'create the emp node
    Dim empName = dr("EmpName").ToString()
    ...

对于数据中的每一行 table 我们:

  • 尝试找到co节点,如果不存在就创建,然后保持对它的引用
  • 尝试在co节点下找到dep节点,不存在则创建,继续引用
  • 在dep节点下添加emp节点

步骤 1 确保找到或创建共同节点,以便步骤 2 可以工作。第 2 步确保创建或找到 dep 节点,以便第 3 步可以工作