递归函数实现无限级树形结构的一种方法
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); //再次递归
}
}
}
}
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); //再次递归
}
}
}
}
相关文章推荐
- 多叉树结合JavaScript树形控件实现无限级树形菜单(一种构建多级有序树形结构JSON(或XML)数据源的方法)
- 多叉树结合JavaScript树形控件实现无限级树形菜单(一种构建多级有序树形结构JSON(或XML)数据源的方法)
- 多叉树结合JavaScript树形控件实现无限级树形菜单(一种构建多级有序树形结构JSON(或XML)数据源的方法)
- java、js中实现无限层级的树形结构方法(类似递归)
- 利用多叉树实现Ext JS中的无限级树形菜单(一种构建多级有序树形结构JSON的方法
- 利用多叉树实现Ext JS中的无限级树形菜单(一种构建多级有序树形结构JSON的方法)
- vue.js与element-ui实现菜单树形结构的解决方法
- 树形结构JSON的实现方法(也叫做JSON嵌套格式)
- Java、JS中实现无限层级的树形结构(类似递归)
- java、js中实现无限层级的树形结构(类似递归)
- thinkPHP实现递归循环栏目并按照树形结构无限极输出的方法
- 采用左右值编码实现无限分级树形结构(转)
- php实现数据树形结构 递归方法
- Django 树形结构实现方法
- 将树形结构的数据转换为二维数组 (续 PHP非递归方式实现无限分类(转载))
- thinkPHP实现递归循环栏目并按照树形结构无限极输出的方法
- java、js中实现无限层级的树形结构(类似递归)
- php简单实现无限分类树形列表的方法
- php实现无限级分类的树形结构
- 树形结构JSON的实现方法