您的位置:首页 > 其它

递归函数实现无限级树形结构的一种方法

2007-10-29 18:05 741 查看
1.建表(SQL Server)

CREATE TABLE menu
(
ID int IDENTITY (1, 1) NOT NULL ,
Title varchar(50) NULL ,
url varchar(50) null,
description varchar(50) null,
ParentID int NULL
) ON PRIMARY

2.在页面上放一个Treeview1,然后写代码


using System;


using System.Data;


using System.Configuration;


using System.Collections;


using System.Web;


using System.Web.Security;


using System.Web.UI;


using System.Web.UI.WebControls;


using System.Web.UI.WebControls.WebParts;


using System.Web.UI.HtmlControls;


using System.Data.SqlClient;




public partial class treeview2 : System.Web.UI.Page






{


protected void Page_Load(object sender, EventArgs e)






{


SqlConnection myConn = new SqlConnection("user id=sa;password=123;Database =test;data source=jeff;");


try






{


//初始化连接字符串




SqlDataAdapter myAdapter = new SqlDataAdapter("select * from menu order by parentID ", myConn); ;


DataSet ds = new DataSet();


myAdapter.Fill(ds);


this.ViewState["ds"] = ds;


}


catch (Exception ex)






{


Session["Error"] = ex.ToString();




}


finally






{


myConn.Close();


}


//调用递归函数,完成树形结构的生成


AddTree(0, (TreeNode)null);




}






//递归添加树的节点


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["Title"].ToString();


TreeView1.Nodes.Add(Node);


Node.Expanded = true;


AddTree(Int32.Parse(Row["ID"].ToString()), Node); //再次递归


}


else






{ //̀添加当前节点的子节点


Node.Text = Row["Title"].ToString();


pNode.ChildNodes.Add(Node);


Node.Expanded = true;


AddTree(Int32.Parse(Row["ID"].ToString()), Node); //再次递归


}


}


}




}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐