使用数据库在启动时将Child节点添加到树视图

时间:2014-05-14 11:52:18

标签: vb.net treeview parent children

我在用于在vb 2008中填充树视图的数据库中有两个不同的表,我已经成功地将父节点显示到树视图中。我的问题是向每个节点显示子节点。我试过treeview1.nodes("node text here").nodes.add("node text here"),但问题是我找到了我正在使用oledbdatareader的节点。这是我目前的代码......

Imports System.Data
Imports System.Data.OleDb
Imports System.Data.SqlClient

Public Class Form1
    Dim mypath = "I:\Casegoods\Database\Expertpetrolia.mdb"
    Dim conn As New OleDbConnection("Provider = microsoft.ace.oledb.12.0;Data Source=" & mypath)
    Dim cmd As OleDbCommand
    Dim dr As OleDbDataReader
    Dim sql1 = "SELECT Due_Date, Date_id FROM Supply_Date ORDER BY [Due_Date]"

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load


    Dim cmd As OleDbCommand
    Using conn

        cmd = New OleDbCommand(sql1, conn)
        conn.Open()

        dr = cmd.ExecuteReader

        If dr.HasRows Then
            Do While dr.Read()
                Dim parent As String = (dr.Item("Due_Date"))

                If DateDiff(Microsoft.VisualBasic.DateInterval.Day, Today, (dr.Item("Due_Date"))) > -10 Then
                    TreeView1.Nodes.Add(parent)
                End If
            Loop
        Else
            MsgBox("No Things found")
        End If

        dr.Close()

        End Using

    End Sub
End Class

我不确定我是否需要另一个oledbdatareader来读取另一个表或另一个oledbcommand或者是什么。我有一个主要的编码块,我似乎无法找到解决方案。

1 个答案:

答案 0 :(得分:1)

如果Total_Purchase中有许多与每个Supply行相关的记录(> 1),您将看到"重复数据" - 来自Supply的数据将重复,因为 与Total_Purchase相关,而 是您的SQL INNER JOIN的行/记录的一部分。

强烈建议查看Access中的查询以了解数据集的外观。

问题变为在循环中添加子节点,直到Due_Date发生更改:

Dim parent As String = ""
Dim parentNode As TreeNode
If dr.HasRows Then
    Do While dr.Read()
        If (parent = (dr.Item("Due_Date"))) Then     ' same parent, add child
            ' add child node (presumably from tbl B data)
        Else
             parent = (dr.Item("Due_Date"))    ' set NEW parent value
             ' save parent node for adding child nodes above
             parentNode = TreeView1.Nodes.Add(parent)
        End If
    Loop
Else

假设SQL正确,您只在更改时添加新父项,否则为此父项添加子节点,直到您检测到新的Due_Date / parent。