treeview与数据库绑定问题

funlove2k 2003-10-18 11:23:55
数据库结构:
bDepEnd cDepName iDepGrade cDepCode
False 综合处 1 1
True 厂办 2 101
True 财务科 2 102
True 运输队 2 103
True 库房 2 104
True 供应科 2 105
False 生产处 1 2
True 金工车间 2 201
True 装配车间 2 202
True 供汽车间 2 203
True 机修车间 2 204
True 医务室 1 3
False 销售处 1 4
True 本地销售科 1 2
bdepend为是否末级别,idepgrade为级别,请问如何将其按编码原则绑定到treeview,如有第四级昨办,可不可以做到无限扩展,要求在form_load中实现
请给出源码,不胜感谢!急1
...全文
28 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
funlove2k 2003-10-20
  • 打赏
  • 举报
回复
有没有更简单的办法,比如ado.net
wolve 2003-10-18
  • 打赏
  • 举报
回复
你的数据库结构怎么来加载treeview。
一般是这样,有两个字段,如NodeId,ParentNodeId。PerentNodeID引用NodeId,这是树结构的数据存储的最好方式。加载时可以先由DataTable转为Xml来处理,也可能直接处理,这其实是树结构的数据算法问题,一般用递归。
eg:
Public Shared Function ParseXmlTree(ByVal XmlSource As String, ByVal RoleId As String) As String
Dim doc As New XmlDocument()
doc.LoadXml(XmlSource)

Dim root As XmlNode
Dim newNode As XmlNode

'Check out xml declaretion element
If Not doc.FirstChild.GetType Is GetType(XmlDeclaration) Then
root = doc.FirstChild
Else
root = doc.ChildNodes(1)
End If

If Not root.LocalName.EndsWith("TREENODES") Then
Throw New Exception(NODE_XML_ERROR_MSG)
Else
newNode = root.CloneNode(False)
ProcessPrivilege(root, newNode, RoleId)
End If


doc = Nothing
Return newNode.OuterXml()
End Function

Private Shared Sub ProcessPrivilege(ByRef oldNode As XmlNode, ByRef newNode As XmlNode, ByVal RoleId As String)
Dim node As XmlNode

For Each node In oldNode.ChildNodes
If node.LocalName.EndsWith("treenode") Then
Try
Dim resourceid As Object = node.Attributes.GetNamedItem(NODE_ATTR_ID_RESOURCEID).Value
Dim flag As Boolean

'No need validate
If resourceid Is Nothing Then
flag = True
Else
node.Attributes.RemoveNamedItem(NODE_ATTR_ID_RESOURCEID)
flag = IsAllowed(RoleId, resourceid)
End If
If flag Then
newNode.AppendChild(node.CloneNode(False))
'Process child recursively
ProcessPrivilege(node, newNode.ChildNodes.ItemOf(newNode.ChildNodes.Count - 1), RoleId)
End If
Catch e As Exception
Throw New Exception(NODE_XML_ERROR_MSG, e)
End Try
Else
Throw New Exception(NODE_XML_ERROR_MSG)
End If
Next
End Sub
这是一个通过递归来访问遍历树的代码,当然,还有其它处理。
lx1920 2003-10-18
  • 打赏
  • 举报
回复
递归,很简单的
liuguangwei 2003-10-18
  • 打赏
  • 举报
回复
up

16,553

社区成员

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

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