Как кто-то может выбрать данные из таблицы базы данных в элемент управления древовидной структуры VB. NET? - PullRequest
0 голосов
/ 27 апреля 2020

VB.NET У меня есть следующая таблица с данными, как показано на рисунке ниже:

enter image description here

Теперь я хочу перенести эти данные в управление древовидной структурой, как показано на другой картинке:

enter image description here

пожалуйста, как я могу сделать это в 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

'' '' '' '' '' '' '' «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» «» '' '' '' '' ''

1 Ответ

1 голос
/ 27 апреля 2020

TreeNodes имеют свойство Name, и TreeNodeCollection (что такое свойство treeview.Nodes или treenode.Nodes) могут находить узлы на основе Name , поэтому ваши логики c должны быть больше например:

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()
    ...

Для каждой строки в таблице данных мы:

  • пытаемся найти узел co, создать его, если он не существует, а затем сохранить ссылку на него
  • попытаться найти узел dep под узлом co, создать, если его не существует, сохранить ссылку на него
  • добавить узел emp под узлом dep

Шаги 1 обеспечивают что узел co найден или создан, так что шаг 2 может работать. Шаг 2 гарантирует, что узел dep создан или найден, так что шаг 3 может работать

...