private void Page_Load(object sender, System.EventArgs e)
{
InitItemTree(tv.Nodes,"0");
} //初始化科目树,并通过递归调用显示子树
private void InitItemTree(TreeNodeCollection tncCurrent,string sParentID)
{
Street.Rule.Popedom oPopedom = new Street.Rule.Popedom();
int userID  = this.GetUserID();
int operate = 0;
int moduleID = 0;
DataTable dt = dt = this.GetModuleList();
dt.TableName = "ModuleList";

DataView dv = new DataView();
TreeNode nodTemp;
dv.Table = dt;
dv.RowFilter = " ParentID = '" + sParentID + "'";
dv.Sort = " Number DESC";
foreach(DataRowView drv in dv)
{
nodTemp = new TreeNode();
nodTemp.ID = drv["ModuleID"].ToString();
nodTemp.Text = drv["ModuleName"].ToString();
nodTemp.NavigateUrl = drv["ModuleUrl"].ToString();
nodTemp.Target = "main";
try
{
moduleID = int.Parse(drv["ModuleID"].ToString());
}
catch{}
if(moduleID>0)
{
operate = oPopedom.GetOperate(userID,moduleID);
}
if(operate>1)
{
tncCurrent.Add(nodTemp);
}
//递归调用显示子树
InitItemTree(nodTemp.Nodes,nodTemp.ID);
}
}

解决方案 »

  1.   

    this.GetModuleList();
    就是调数据库中的模块列表,用ParentID分层
      

  2.   

    给你一个三层树
    Create three .aspx filesTreeViewDataSet.aspx<%@ import Namespace="Microsoft.Web.UI.WebControls" %>
    <%@ Register TagPrefix="IE" Namespace="Microsoft.Web.UI.WebControls" Assembly="Microsoft.Web.UI.WebControls" %><html>
    <head>
    <title>
    TreeViewDataSet.aspx
    </title>
    </head>
    <body>
    <form runat="Server">
    <IE:TreeView
     AutoPostBack="True"
     TreeNodeSrc="Categories.aspx"
     Runat="Server"/>
    </form>
    </body>
    </html>Categories.aspx
    <%@ Import Namespace="System.Data" %>
    <%@ Import Namespace="System.Data.SqlClient" %><Script runat="Server">
    sub page_load
     Dim mycon as SqlConnection
     Dim cmdCategories As SqlCommand
     Dim dsCategories As DataSet
     Dim strQuery As String mycon=New Sqlconnection("Server=localhost;UID=sa;PWD=secret;Database=Northwind")
     strQuery="select categoryname as Text,'products.aspx?catid='
     +LTRIM(STR(CategoryID))" & _
     "As TreeNodeSrc from Categories As TreeNode for xml auto, XMLDATA"
     cmdCategories=new SqlCommand(strQuery,mycon)
     dsCategories=New DataSet
     dsCategories.ReadXML(cmdCategories.ExecuteXmlReader(),XmlReadMode.Fragment)
     dsCategories.DataSetName="TREENODES"
     dsCategories.WriteXml(Response.OutputStream)
    end sub
    </script>Products.aspx
    <%@ Import Namespace="System.Data" %>
    <%@ Import Namespace="System.Data.SqlClient" %><Script runat="Server">
    sub page_load
     Dim mycon as SqlConnection
     Dim cmdProducts As SqlCommand
     Dim dsProducts As DataSet
     Dim strQuery As String mycon=New Sqlconnection("Server=localhost;UID=sa;PWD=secret;Database=Northwind")
     strQuery="select Productname as Text from products As TreeNode" & _
     " where CategoryID=@categoryID for xml auto, XMLDATA "
     cmdproducts=new SqlCommand(strQuery,mycon)
     cmdproducts.Parameters.Add(New SqlParameter("@categoryID",Request.QueryString("catID")))
     mycon.open()
     dsproducts=New DataSet
     dsproducts.ReadXML(cmdproducts.ExecuteXmlReader(),XmlReadMode.Fragment)
     dsproducts.DataSetName="TREENODES"
     dsproducts.WriteXml(Response.OutputStream)
     mycon.close()
    end sub
    </script>
      

  3.   

    我用了第一个人的方法建立了一个数据库但是,这个只能实现2层的树
    最好是vb.net代码
    我这里也有这个代码
        Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            '在此处放置初始化页的用户代码
            Dim node As TreeNode = New TreeNode
            Dim myrd As OleDbDataReader
            conn.ConnectionString = "provider=microsoft.jet.oledb.4.0;data source=" & Server.MapPath("dataset.mdb")
            CreateDataset()
            nodeadd("0", TreeView1.Nodes)
        End Sub
        Sub nodeadd(ByVal parentid As Integer, ByRef pnode As TreeNodeCollection)
            Dim dvtree As DataView = New DataView
            dvtree.Table = mydataset.Tables("teble")
            dvtree.RowFilter = "seedid='" & parentid & "'"
            Dim rows As DataRowView
            Dim tmpnd As TreeNode
            Dim strid As String
            For Each rows In dvtree
                    tmpnd = New TreeNode
                    tmpnd.ID = rows("id")
                    tmpnd.Text = rows("parent")
                    'tmpnd.ImageUrl = ""
                    Dim strs As String = "index.aspx?id=" & tmpnd.Text
                    tmpnd.NavigateUrl = strs
                    pnode.Add(tmpnd)
                    strid = rows("id").ToString
                    nodeadd(tmpnd.ID, tmpnd.Nodes)
            Next    End Sub
        Private Sub CreateDataset()
            If conn.State = ConnectionState.Closed Then
                conn.Open()
                cmd.Connection = conn
                cmd.CommandText = "select * from mydataset"
                cmd.CommandType = CommandType.Text
                mycmd = New OleDbDataAdapter(cmd)
                mycmd.Fill(mydataset, "teble")
            End If
            If conn.State = ConnectionState.Open Then
                conn.Close()
            End If
            If Not cmd Is Nothing Then
                cmd.Dispose()
            End If
            If Not mycmd Is Nothing Then
                mycmd.Dispose()
            End If
        End Sub
    如何实现3层4层的树了.
      

  4.   

    把树的相关信息写到数据库中,用递归来调,多少层都行呀
    给你一个我的例子   Private Sub LoadNode(ByRef treeview As Microsoft.Web.UI.WebControls.TreeView, ByRef tvwNode As Microsoft.Web.UI.WebControls.TreeNode, ByVal strsql As String, ByVal strJH As String)
            '使用递归的方法生成目录树
            Dim cnn As New OracleConnection(G_strCnn)
            Dim rd As OracleDataReader
            Dim cmd As New OracleCommand(strsql, cnn)
            Dim strsubsql As String
            Try
                cnn.Open()
                rd = cmd.ExecuteReader
                While rd.Read
                    Dim trvsubNode As New Microsoft.Web.UI.WebControls.TreeNode
                    trvsubNode.NodeData = rd.Item("NODEID") & ""
                    If Not (rd.IsDBNull(6)) Then
                        trvsubNode.ExpandedImageUrl = "../" & rd.Item("NODEEXPIMAGE")
                    End If
                    trvsubNode.DefaultStyle.Add("color", "#ffffff")
                    trvsubNode.Text = rd.Item("NODETEXT") & ""
                    If (rd.IsDBNull(2)) Then
                        '  trvsubNode.ImageUrl = "images/homepage/menu/movearrow01.gif"
                    Else
                        trvsubNode.ImageUrl = "../" & rd.Item("NODEIMAGE") & ""
                    End If
                    If rd.IsDBNull(4) Then
                        trvsubNode.Target = "main"
                    Else
                        trvsubNode.Target = rd.Item("NODETARGETTYPE") & ""
                    End If
                    If Not rd.IsDBNull(3) Then
                        trvsubNode.NavigateUrl = rd.Item("NODETARGET") & strJH
                    End If                Try
                            If tvwNode Is Nothing Then
                                treeview.Nodes.Add(trvsubNode)
                            Else
                                tvwNode.Nodes.Add(trvsubNode)
                            End If
                    Catch ex As Exception                End Try
                        strsubsql = "Select NODEID,NODETEXT,NODEIMAGE,NODETARGET,NODETARGETTYPE,ZYPARENTNODEID,NODEEXPIMAGE,nodetype,nodevisible,NODESY From JSYS_101A Where   NODEVISIBLE<>0 and ZYPARENTNODEID='" & rd.Item("NODEID") & "' order by ZYNODESORTE "
                    Call LoadNode(treeview, trvsubNode, strsubsql, strJH)
                End While
            Catch ex As Exception
                Response.Write(ex.ToString)
            Finally
                cmd.Dispose()
                rd.Close()
                rd.Dispose()
                cnn.Close()
                cnn.Dispose()
            End Try
        End Sub