这是vb的代码,你看看吧
page_load()中
inittree(TreeView2.Nodes, 0)
 
Sub inittree(ByRef Nds As TreeNodeCollection, ByVal parentId As Integer)        Dim strconn1 As String = "server=zhao;database=TreeNode;integrated security=sspi"        Dim conn As New SqlConnection(strconn1)
        conn.open()
        '设置SelectCommand命令
        Dim comm As New SqlDataAdapter("select * from node", conn)        Dim mySet As New DataSet        '填充数据集
        comm.Fill(mySet, "node")
        Dim dv As New DataView
        Dim dvrow As DataRowView
        Dim tmpNode As TreeNode
        'intId为数值型变量,其作用是记录并传递当前记录的ID,做为它子节点的PARENTID值
        Dim intId As Integer
        dv.Table = mySet.Tables("node")
        'parentId传递的是 additem函数中的intId.下面语句的作用是找出当前节点的子孩子集合。 
        dv.RowFilter = "father='" & parentId & "'"
        '如果当前节点有孩子,则遍历所有的孩子,并调用递归函数。        For Each dvrow In dv
            tmpNode = New TreeNode
            '为当前节点的各个属性赋值。
            tmpNode.ID = dvrow("id")
            tmpNode.Text = dvrow("text")
            intId = dvrow("id")            inittree(tmpNode.Nodes, intId) '递归
            '添加一个节点
            Nds.Add(tmpNode)
            '调用递归函数        Next        conn.Close()
    End Sub

解决方案 »

  1.   

    建立一张树型结构的标,读到dataset中
    然后递归填充
    //
    private DataSet CreateDataSet(string powers)
    {
    sql="select * from powers where pow_no IN("+powers+") and pow_station=1 ORDER BY pow_no ASC";
    cmd=new SqlDataAdapter(sql,con.conn);
    ds=new DataSet();
    cmd.Fill(ds,"tree");
    return ds;
    } private void inittree(TreeNodeCollection Nds,string parentid)
    {
    DataView dv = new DataView();
    TreeNode tmpnd;
    string intid;
    dv.Table=ds.Tables["tree"];
    dv.RowFilter="pow_ParentId='"+parentid+"'";
    foreach(DataRowView drv in dv)
    {
    tmpnd= new TreeNode();
    tmpnd.ID=drv["pow_no"].ToString();
    tmpnd.Text=drv["pow_name"].ToString();
    tmpnd.ImageUrl=drv["pow_icon"].ToString();
    tmpnd.NavigateUrl="../main.aspx?"+con.DESEncrypt((drv["pow_url"].ToString()+"|"+drv["pow_no"].ToString()),Session["sta_perkey"].ToString());
    tmpnd.Target="rightFrm";
    Nds.Add(tmpnd);
    intid=drv["pow_parentid"].ToString();
    inittree(tmpnd.Nodes,tmpnd.ID);
    }
    }
      

  2.   

    把树的相关信息写到数据库中,用递归来调
    给你一个我的例子   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
      

  3.   

    请问一下有没有C#的代码?vb不太懂。。谢谢
      

  4.   

    using System;
    using System.Collections;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Web;
    using System.Web.SessionState;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.HtmlControls;
    using Microsoft.Web.UI.WebControls;
    using System.Data.SqlClient;namespace treeview
    {
    /// <summary>
    /// treeview 的摘要说明。
    /// </summary>
    public class treeview : System.Web.UI.Page
    {
    protected Microsoft.Web.UI.WebControls.TreeView TreeView1;

    private void Page_Load(object sender, System.EventArgs e)
    {
    if (Page.IsPostBack) { if (Request.Form["Isdbclick"].ToString()=="true") { trvModel_DblClick(); } } //第一次调用时候绑定数据
    if(!Page.IsPostBack)
    {
    BindDataToTree();
    }
    } public void BindDataToTree()
    {
    // 定义数据库连接
    SqlConnection CN = new SqlConnection();
    try 
    {
    //初始化连接字符串
    CN.ConnectionString= "data source=db;initial catalog=treeview;persist security info=False;user id=sa;Password=retia;";
    CN.Open(); SqlDataAdapter adp = new SqlDataAdapter("select * from tbTree",CN);
    DataSet ds=new DataSet();
    adp.Fill(ds);
    this.ViewState["ds"]=ds;  }
    catch (Exception ex)
    {
    this.Response.Write("<script language=javascript>alert('" + ex.Message + "');</script>");
    // Session["Error"] = ex.ToString();
    // Response.Redirect("error.aspx");       //跳转程序的公共错误处理页面
    }
    finally 
    {
    CN.Close();
    }
    //调用递归函数,完成树形结构的生成
    AddTree(0, (TreeNode)null);
    } public void trvModel_DblClick()
    {
    //做自己想做的事情。。^_^
    this.Response.Write("<script language=javascript>alert('hello!');</script>");
    } // 递归添加树的节点
    public void AddTree(int ParentID,TreeNode pNode) 
    {
    DataSet ds=(DataSet) this.ViewState["ds"];  
    DataView dvTree = new DataView(ds.Tables[0]);
    //过滤ParentID,得到当前的所有子节点
    dvTree.RowFilter =  "[PARENTID] = " + ParentID;
    foreach(DataRowView Row in dvTree) 
    {
    TreeNode Node=new TreeNode() ;
    if(pNode == null) 
    {    //'?添加根节点
    Node.Text = Row["ConText"].ToString();
    TreeView1.Nodes.Add(Node);
    Node.Expanded=false;
    AddTree(Int32.Parse(Row["ID"].ToString()), Node);    //再次递归

    else 
    {   //添加当前节点的子节点
    Node.Text = Row["ConText"].ToString();
    pNode.Nodes.Add(Node);
    Node.NavigateUrl=Row["url"].ToString();
    Node.Expanded = false;
    Node.Target = "fraContent";
    AddTree(Int32.Parse(Row["ID"].ToString()),Node);     //再次递归
    }
    }                   
    }             #region Web Form Designer generated code
    override protected void OnInit(EventArgs e)
    {
    //
    // CODEGEN:该调用是 ASP.NET Web 窗体设计器所必需的。
    //
    InitializeComponent();
    base.OnInit(e);
    }

    /// <summary>
    /// 设计器支持所需的方法 - 不要使用代码编辑器修改
    /// 此方法的内容。
    /// </summary>
    private void InitializeComponent()
    {    
    this.Load += new System.EventHandler(this.Page_Load); }
    #endregion
    }
    }
      

  5.   

    数据库这样建立:if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[tbTree]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
    drop table [dbo].[tbTree]
    GOCREATE TABLE [dbo].[tbTree] (
    [ID] [int] IDENTITY (1, 1) NOT NULL ,
    [Context] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
    [ParentID] [int] NULL ,
    [url] [nvarchar] (500) COLLATE Chinese_PRC_CI_AS NULL 
    ) ON [PRIMARY]
    GO