我在用于在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或者是什么。我有一个主要的编码块,我似乎无法找到解决方案。
答案 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。