treeView的实现转摘http://spaces.msn.com/members/netrich/

在VB.NET中实现 在.NET中,由于TreeView控件的用法和VB6中的用法是不一样的!以前的VB6程序员会因为节点没有Key属性而烦恼!在.NET中,TreeView树的节点是一个集合,每个 TreeNode 都可以包含其他 TreeNode 对象的集合。要确定您在树结构中的位置,得使用 FullPath 属性。 我们知道,添加节点只能是在找到节点之后再此节点下添加。现在VB.NET少了Key属性,对操作是一个很大的不便。微软MSDN有一篇文章用继承和重载的方法,扩展了TreeView控件,给节点加了一个key属性。有兴趣的读者可以看一下HOW TO:Create a Key Property for a TreeView Node in Visual Basic .NET这篇文章。但是美中不足的是:这篇文章只是为TreeNode加了一个NodeKey属性,但是没有提供好的Key值检索功能。尽管这一切我们都可以用代码来扩展,但是代码冗长。 所以,添加许多层节点的树形结构,只能是递归调用。而且,我们下面的代码很精炼,只需要传给递归过程一个ParentID,就会将这个编号下的所有节点加载到树形结构中! 充分体现了:简单就是好的思想。 设计思想:从数据库中查询到所有节点的记录,添加到DataView中,利用DataView的.RowFilter属性得到某个父节点编号ParentID下的所有记录,依次递归循环。

    Private ds As New DataSet    ' AddTree递归函数每次都要用到数据集中的一个表,所以定义成private
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        ' '定义数据库连接
        Dim CN As New OleDbConnection
        Try
            '初始化连接字符串
            CN.ConnectionString = "Provider=Microsoft.Jet.Oledb.4.0;data source=D:/程序练习/vbNet/treemode/MyData.mdb"
            CN.Open()
            '添加命令,从数据库中得到数据
            Dim Cmd As New OleDbCommand
            Cmd.Connection = CN
            Cmd.CommandText = "select * from tbtree"
            Cmd.CommandType = CommandType.Text
            Dim adp As OleDbDataAdapter = New OleDbDataAdapter(Cmd)
            adp.Fill(ds)
        Catch ex As Exception
            MsgBox(ex.Message)
        Finally
            '关闭连接
            CN.Close()
        End Try
        '调用递归函数,完成树形结构的生成
        AddTree(0, Nothing)
    End Sub
    '?递归添加树的节点
    Private Sub AddTree(ByVal ParentID As Integer, ByVal pNode As TreeNode)
        Dim Node As TreeNode
        Dim dvTree As New DataView
        dvTree = New DataView(ds.Tables(0))
        '过滤ParentID,得到当前的所有子节点
        dvTree.RowFilter = "PARENTID = " + ParentID.ToString
        Dim Row As DataRowView
        For Each Row In dvTree
            If pNode Is Nothing Then
                '判断是否根节点
                '?添加根节点
                Node = TreeView1.Nodes.Add(Row("context").ToString())
                '?再次递归
                AddTree(Int32.Parse(Row("ID").ToString()), Node)
            Else
                '添加当前节点的子节点
                Node = pNode.Nodes.Add(Row("context").ToString())
                '?再次递归
                AddTree(Int32.Parse(Row("ID").ToString()), Node)
            End If
            Node.EnsureVisible()
        Next
    End Sub

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值