当前位置:编程学习 > C#/ASP.NET >>

求treeview绑定数据库的代码,要好用的!!!

俺用的vb.net加access2000,俺的数据裤结构如下:
'节点ID   父节点      节点名称 
id    praentid     name 1        0          aa 
2        0          bb 
3        0          cc 
4        1          dd 
5        1          ee 
6        1          ff 
7        1          gg 

求实现数据裤绑定treeview的代码~~~要实用点的具体代码~~

俺的另外一帖再这里,解决不了。。。。只好新开本帖来求了。。。没啥分了。。
http://topic.csdn.net/u/20080314/21/7794597e-261d-4449-90cb-b0e1e13b7612.html

先谢谢各位老大了!

--------------------编程问答-------------------- 2006/2/25
从数据库加载数据到treeview的几种方法
环境:win2003+vb.net 2003
今天在看MVP专栏作家--李洪根的一篇文章叫:树形结构在开发中的应用.(http://www.microsoft.com/china/community/Column/21.mspx)时,看到他在设计数据库的时候用了一个depth字段(存放节点的层数,也就是说这个节点在树中的哪个层。
有Depth(深度)字段,我们编程时会比较方便,在SQL查询时只有加一个where 条件就可以查询出当前深度的层的所有节点。)这个在VB6里运用:Rs.Open "select * from tbTree 
    where depth<='" & intDepth & "' 
    order by depth", CN, adOpenDynamic, adLockReadOnly
,查询出来然后添加到树节点里非常方便.当时我在写这个的时候做法是这样的:没有depth这个字段,靠节点本身的ID和它的父ID来确定节点层次关系及位置.先把数据库中的所有数据作为根节点加到树当中,然后根据父ID设置节点的父节点,代码如下:
Private Sub LoadNode2()
    On Error Resume Next
    Dim RstTemp As New ADODB.Recordset
    Dim I As Integer
    Dim J As Integer
    Dim NodeX As Node
    If rstNode.State = adStateOpen Then rstNode.Close
    rstNode.Open "SELECT * FROM 节点表", adoConnection, adOpenStatic, adLockOptimistic
    
    For I = 1 To rstNode.RecordCount  '''每个节点都是以"Node"和数据库中的ID号为KEY
        Set NodeX = Me.TreeView1.Nodes.Add(, , "Node" & CStr(rstNode.Fields("ID").Value), "(" & rstNode.Fields("ID").Value & ")" & rstNode.Fields("标题").Value) '''这个是根节点,数据库中父节点字段为空)
        NodeX.EnsureVisible
        rstNode.MoveNext
    Next I
    rstNode.MoveFirst
    For I = 1 To rstNode.RecordCount
        
        If Not IsNull(rstNode.Fields("父ID").Value) Then '根节点的父ID为NULL值
            Set Me.TreeView1.Nodes("Node" & rstNode.Fields("ID").Value).Parent = Me.TreeView1.Nodes("Node" & rstNode.Fields("父ID").Value)
            NodeX.EnsureVisible
        End If
        rstNode.MoveNext
    Next I
End Sub
呵呵,上面是我自己写的方法.
在VB.NET里李洪根用的方法是用一个dataview,然后用:dvTree.RowFilter = "PARENTID = " + ParentID.ToString,把相关的记录过滤出来,再递归调用.哈哈,有兴趣看他的原文吧,不错.我后来学VB.NET的时候也遇到过把数据加载到TREEVIEW的问题,于是想把VB6的代码翻译过来,可是TREEVIEW控件在.NET里做了太大的改动(没有parent属性),后来也看到出了一个实现方法(哪看的忘了):先建立好表的父子关系,然后弟归调用.还是看代码吧:
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim ds As New DataSet
        Dim cmdSelect As New SqlClient.SqlCommand("select * from 节点表", Me.SqlConnection1)
        Me.SqlDataAdapter1.SelectCommand = cmdSelect
        Me.SqlDataAdapter1.Fill(ds, "t1")
        ds.Relations.Add("r1", ds.Tables("t1").Columns("ID"), ds.Tables("t1").Columns("父ID"))
        Dim row As DataRow
        For Each row In ds.Tables("t1").Rows
            If IsDBNull(row.Item("父ID")) Then
                Call DisplayRow(row, row.Item("标题"), Nothing)
            End If
        Next
        Me.TreeView1.ExpandAll()
    End Sub
    Private Sub DisplayRow(ByVal row As DataRow, ByVal s As String, ByVal n As TreeNode)
        If n Is Nothing Then
            n = Me.TreeView1.Nodes.Add(s)
        Else
            n = n.Nodes.Add(s)
        End If
        Dim ChildRow As DataRow
        For Each ChildRow In row.GetChildRows("r1")
            DisplayRow(ChildRow, ChildRow.Item("标题"), n)
        Next
    End Sub --------------------编程问答--------------------
补充:.NET技术 ,  VB.NET
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,