TreeView控件递归调用access数据库的问题

abudan 2012-03-29 03:02:33
小弟刚开始接触vb.net,现在有个winform程序要写,100分相赠,望高手帮助……
access数据库中的一张表,叫unit,表里就3列,分别是ID,Name,ParentID:
1,XXX,0
2,YYY,0
3,XX1,1
4,XX2,1
5,YY1,2
6,YY2,2
7,X1,3
8,X2,3
就是以上这个结构的access数据库,现在需要读取这张表的数据,然后分层的显示在TreeView控件中:
XXX
--XX1
----X1
----X2
--XX2
YYY
--YY1
--YY2
如同以上的表现方式,小弟在网络上我找了好久,都没这个VB.NET+access的源码,希望好心人帮助一下,万分感谢!
...全文
249 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
netdragon2 2012-04-07
  • 打赏
  • 举报
回复
不知道你能不能看懂
有些参数 例如conn是其它地方已经赋值了
如果要能完整运行的,那我把项目打包给你好了,留下QQ吧


'得到数据库目录记录
Public Function GetSort(ByRef i As Integer) As Integer
'Dim myDT As DataTable
Dim OleDbConn As New OleDbConnection(conn)
OleDbConn.Open()
Dim selectcomm As String = "select * from Sort where LevelID = " & i.ToString
Dim apt As OleDbDataAdapter = New OleDbDataAdapter(selectcomm, OleDbConn)
Dim myDS As DataSet = New DataSet
apt.Fill(myDS, "Sort")
dt = myDS.Tables.Item(0)
OleDbConn.Close()
Return dt.Rows.Count
End Function
'递归查nodes
Public Sub SeachNode(ByVal node As TreeNode, ByVal addnode As TreeNode)
Dim myNode As TreeNode = New TreeNode
For Each myNode In node.Nodes
If yn = False Then
If CInt(myNode.Tag(0)) = addnode.Tag(1) Then
myNode.Nodes.Add(addnode)
yn = True
Exit Sub
Else
SeachNode(myNode, addnode)
End If
Else
Exit Sub
End If
Next
End Sub
''' <summary>
''' 把Sort表中的目录显示在tv控件中
''' </summary>
''' <remarks></remarks>
Public Sub Showtv()
Dim i, j As Integer
i = 1
j = GetSort(i)

Do Until j = 0
If j > 0 Then
Dim row As DataRow

For Each row In dt.Rows
If row("LevelID") = 1 Then
Dim myNode As TreeNode = New TreeNode
Dim abouts(2) As String
myNode.Text = row("项目标题")
abouts(0) = row("SortID")
abouts(1) = row("FatherID")
abouts(2) = row("LevelID")
myNode.Tag = abouts
tv.Nodes.Add(myNode)
Else
Dim myNode As TreeNode = New TreeNode
Dim abouts(2) As String
myNode.Text = row("项目标题")
abouts(0) = row("SortID")
abouts(1) = row("FatherID")
abouts(2) = row("LevelID")
myNode.Tag = abouts
Dim newNode As TreeNode = New TreeNode
yn = False
For Each newNode In tv.Nodes
If yn = True Then
Exit For
Else
If newNode.Tag(0) = myNode.Tag(1) Then
newNode.Nodes.Add(myNode)

Exit For
Else
SeachNode(newNode, myNode)
End If
End If

Next
End If
Next
i += 1
j = GetSort(i)
End If
Loop


End Sub
abudan 2012-04-05
  • 打赏
  • 举报
回复
按照楼上的同志的思路,试了下,还是不行,哎
段传涛 2012-04-05
  • 打赏
  • 举报
回复
vb 的 没有C# 的可以吗?
arsenalhj 2012-04-05
  • 打赏
  • 举报
回复
看此贴:
http://topic.csdn.net/u/20120329/16/0b8061d4-54f2-4620-ad95-68e6d55a4728.html
ilooknow 2012-03-31
  • 打赏
  • 举报
回复
通过tree.nodes的Key来寻找父级节点即可,例如:
dim n1, n2 as treenode
for each row in tb1.rows
if row1(2)>0 then
n1=tree.nodes(row1(2)).add(row1(0), row1(1))
else
n1=tree.nodes.add(row1(0), row1(1))
end if
next
tanqian123 2012-03-31
  • 打赏
  • 举报
回复
这个问题:
1,建议在ACCESS表格中增加一列,表示父节点记录的ID;
2,如果数据多的时候,建议不要一下子在ACCESS中读取,速度会很慢的;本人测试过4000条记录,这样的做法非常慢了;还是把最近节点显示到控件的节点(估计也就30条)存储为一个txt文件,放在access表格中,第一次加载的时候,直接加载txt文件的信息;如果节点展开/收缩,就针对父节点ID,读取/筛选一次ACCESS表;
lzy513 2012-03-30
  • 打赏
  • 举报
回复
再把 ParentID 0 进行区别一下。
第一级节点
dim nod(第一级节点数) as TreeNode
dim i as Integer
nod(i) = New TreeNode
nod(i) = TreeView1.Nodes.Add("xxx")
第二级节点
dim nod1(第二级节点数) as TreeNode
dim j as Integer
nod(j) = New TreeNode
nod(j) = nod(i).Nodes.Add("xx1")
最后底内容
nod(j).text="x1"
其他的取数据的没写,只写了如何建节点的。如有疑问,可参看我的QQ空间:http://user.qzone.qq.com/631582825/infocenter#!app=2&pos=1320153235
abudan 2012-03-29
  • 打赏
  • 举报
回复
谢谢楼上的同志,但是由于底子比较差……还是得要看了可以运行的源码程序才会,因为数据库连接也是个问题……
bdmh 2012-03-29
  • 打赏
  • 举报
回复
参考,delphi代码,理解了就行

http://blog.csdn.net/bdmh/article/details/5857236

16,554

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧