我在VS2005中使用TREEVIEW控件从数据库中动态抽取数据形成了一个树,但只能点每一级前面的加号才能打开这一级的菜单,我的问题是:一\能不能点击每一级的文字就打开这一级呢?比如说:+单位,在这里我点击+能打开,点击单位就没有反应;二\另外这里的+很小,如何显示大加号呀!
我想要的最终效果是这个样子:http://msdn.microsoft.com/zh-cn/library/aa187919.aspx请大家注意我这里是动态从数据库中抽取的数据形成的TREE,不是静态的.
我想要的最终效果是这个样子:http://msdn.microsoft.com/zh-cn/library/aa187919.aspx请大家注意我这里是动态从数据库中抽取的数据形成的TREE,不是静态的.
Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
dt = GetTable("select * from tree") //这里是获得表的内容 Dim dv As DataView = dt.DefaultView
dv.RowFilter = "parentid='0'" For Each row As DataRowView In dv
Dim nd As New TreeNode(row("text"))
nd.Tag = row("id")
tree.Nodes.Add(nd)
Next
End Sub
2.在tree的AfterExpand和MouseDown添加如下代码:
Private Sub tree_AfterExpand(ByVal sender As System.Object, ByVal e As System.Windows.Forms.TreeViewEventArgs) Handles tree.AfterExpand
LoadNodes(e.Node)
End Sub Private Sub tree_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles tree.MouseDown
Dim ndTemp As TreeNode ndTemp = tree.GetNodeAt(e.Location) If Not ndTemp Is Nothing Then
LoadNodes(ndTemp)
ndTemp.Expand()
End If
End Sub Private Sub LoadNodes(ByVal node As TreeNode)
If Not node Is Nothing Then
Dim dv As DataView
dv = dt.DefaultView
dv.RowFilter = "parentid='" + node.Tag.ToString() + "'" For Each row As DataRowView In dv
Dim nd As New TreeNode(row("text"))
nd.Tag = row("id")
node.Nodes.Add(nd)
Next
End If
End Sub这样一来就可以实现第一个问题了。不管是点+号,还是文本都可以动态加载结点下的内容注:数据库中的tree表结构为三列 id,parentid,text,最上层的parentid都为0,子结点的parentid为最上层结点的id
搞定~~~