改造TreeView(转)

Posted on 2010-12-15 19:51  gmtyt  阅读(314)  评论(0)    收藏  举报
这两天有空啊,决定来改造一下TreeView控件,TreeView的数据源只能是xml,如果要从数据库里读取数据来动态的生成节点要怎么办呢?网上多数人使用的方法是从数据库里面读取数据存成xml格式.但是我想让它能够直接从数据库里面读取数据来生成呢?于是要对它进行改造,TreeView体现的是层次结构,在关系数据库设计的时候要体现层次结构一般使用多个表,通过主,外键来建立关系.这里假设数据分别存在n个表中,分别是table1,table2,......,table(n).分别存的是TreeView的各个层次,这n个表应该有相同的结构(除了根节点的表),我们假设表的结构是这样的[ID,...,fatherID]中ID是主键,fatherID是外键(父节点的ID).我们决定为TreeView增加一个Dateset属性,Link属性
private ds as dataset
private slink as string
public property Dataset()
   get()
     return ds
   end get
   Set(ByVal value)
         ds = value
    End Set
End Property
public property Link()
   get()
     return slink   end get
   Set(ByVal value)
         slink = value
    End Set
End Property
 
在Treeview的page_load事件添加下面的代码
 If Not IsPostBack Then
            For Each row In ds.Tables(0).Rows
                Dim node As New TreeNode
                node.Value = row.Item(0)
                node.Text = row.Item(1)
                TreeView1.Nodes.Add(node)
            Next
  End If
这里已经添加了根节点了.
在Treeview的TreeView1_SelectedNodeChanged时间下面添加下面代码
        Dim i As Int16
        i = TreeView1.SelectedNode.ChildNodes.Count
        If i > 0 Then
            TreeView1.SelectedNode.Expand()'判断是否已经添加了节点
        Else
            If TreeView1.SelectedNode.Depth + 1 < ds.Tables.Count Then
                For Each row In ds1.Tables(TreeView1.SelectedNode.Depth + 1).Rows
                   If row.Item(link) = TreeView1.SelectedNode.Value Then
                        Dim node As New TreeNode
                        node.Value = row.Item(0)
                        node.Text = row.Item(1)
                        TreeView1.SelectedNode.ChildNodes.Add(node)
                    End If
                Next
                TreeView1.SelectedNode.Expand()
            End If
        End If
到这就已经完成了节点的添加了,要使用它只需要给它一个dataset 就ok了,它对dataset还有一定的要求:
即其中的表要按照层次结构来排列,使用方法在下面
 
        Dim conn As SqlConnection
        Dim cmdstr As String
        Dim ds As New DataSet
        Dim da As SqlDataAdapter
        conn = New SqlConnection(连接字符串)
        cmdstr = "SELECT * FROM table1; SELECT * FROM table12 ;...;SELECT * FROM table1(n)"
        da = New SqlDataAdapter(cmdstr, conn)
        da.Fill(ds)
        superTreeview1.set_dataset(ds)
        superTreeview1.Link= 3
这样就行了,但是这只是添加了接点并没有实际意义,所以我们需要让Treeview返回一些必要的数据,是我们能够根据返回数据作出判断.
我选择了返回当前节点的depth和value.你也可以返回其他的.
我会在最近的时间给出下载地址的

博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3