请教treeview的问题,如何用编码来实现node的选中,而不是用鼠标或是键盘选中?

如题
环境:vs2003,win2003
---------------------------------------------------------------

Me.TreeView1.SelectedNode = Me.TreeView1.Nodes(0)
---------------------------------------------------------------

设置Me.TreeView1.SelectedNode就可以了。
---------------------------------------------------------------

Me.TreeView1.SelectedNode看起来很简单,例如Me.TreeView1.SelectedNode = Me.TreeView1.Nodes(0),但是这涉及到一个严重的问题,每个treenode对象都包含自己的Nodes对象。比如:
根------父1
&brvbar---父2--------子1
&brvbar----子2

myNode as treenode
mynode=treeview1.nodes(0)'返回根节点
mynode=mynode.nodes(1)'返回会父2
mynode=mynode.nodes(0)'返回会子1

这有一个问题,没有一个全局的Index属性来让你指定某个节点。比如treeview1.nodes(0)是根节点,但是treeview1.nodes(1)是什么呢?答案是没有这个东西。所以你不能指望通过Me.TreeView1.SelectedNode = Me.TreeView1.Nodes(索引)的方式指定你的节点。

'***********************
'派生树节点
'***********************
Friend Class myTreeNode
Inherits TreeNode
'一些公共属性
Public intNodeID As String '编号
Public intLevel As Integer '级别
Public intParentNode As Integer '父节点

Sub New()
MyBase.New()
End Sub

End Class

'*****************************
'功能:在指定节点下填充“所有”子节点
'参数:节点
'返回:无
'注意:无
'********************************

Public Sub fillAllChildNodes(ByVal theTreeNode As TreeNode)

Try
Dim mydrNodes As SqlDataReader
Dim n As myTreeNode

n = CType(theTreeNode, myTreeNode) '转换为派生treeNode类
'读取子节点
mydrNodes = m_objNavigatetree.GetChildNodes(n.intNodeID)
'添加每个叶
While mydrNodes.Read
Dim tree_leaf As New myTreeNode()
With tree_leaf
.Text = mydrNodes.Item("名称")
.intNodeID = mydrNodes.Item("编号")
.intParentNode = mydrNodes.Item("父节点")
.intLevel = mydrNodes.Item("级别")
.ImageIndex = mydrNodes.Item("图标")
.SelectedImageIndex = mydrNodes.Item("选择图标")
End With
tvwNavigate.SelectedNode = theTreeNode
tvwNavigate.SelectedNode.Nodes.Add(tree_leaf)
fillAllChildNodes(tree_leaf) '递归
End While

Catch ex As Exception

MsgBox(ex.Message)

End Try

End Sub

下面是学习了herry的动态加载节点例子的一个东东

'*****************************
'功能:在选定节点下填充下一级子节点
'参数:当前节点的编号
'返回:无
'注意:必须先存在一个根节点,然后根据点击调用
'********************************

Public Sub fillChildNodes(ByVal CurrentNodeID As Integer)

Try
'读取子节点
drNodes = m_objNavigatetree.GetChildNodes(CurrentNodeID)
'添加每个叶
While drNodes.Read
Dim tree_leaf As New myTreeNode()
With tree_leaf
.Text = drNodes.Item("名称")
.intNodeID = drNodes.Item("编号")
.intParentNode = drNodes.Item("父节点")
.intLevel = drNodes.Item("级别")
.ImageIndex = drNodes.Item("图标")
.SelectedImageIndex = drNodes.Item("选择图标")
End With

tvwNavigate.SelectedNode.Nodes.Add(tree_leaf)
End While

Catch ex As Exception

MsgBox(ex.Message)

End Try

End Sub

数据库结构为

编号 名称 级别 父节点 图标 选择图标

GetChildNodes(n.intNodeID)是一个根据节点编号获取该节点所有子节点的函数(大概是select * from Table1 where 父节点=@nodeid),返回一个Sqldatareader。

Published At
Categories with Web编程
Tagged with
comments powered by Disqus