您的位置:首页 > 编程语言 > ASP

asp.net treeview递归写法(详细!!!)

2007-11-08 11:44 295 查看
最近在写一个treeview,参考了网上很多种写法,终于总结出自己treeview的写法了!!分享给大家。

假设数据库表:

Table-------

idnamefatherid

1a0

2b1

3c1

4d2

5e3

.

.

.

asp页面添加的treeview名称为TreeVieww1,绑定数据库后得到的DataTable名称为dt,需要在treeview中绑定的节点Text为"name",Node为"id",

父节点id为"fatherid",

那么在asp页面可以这样写

protectedvoidPage_Load(objectsender,EventArgse)
{
if(!IsPostBack)
{
//获取填充树所需要的DataTable
DataTabledt=dtAdapter.GetClass();
//填充树
newtree.AddTree(dt,TreeView1,"name","id","005000000000",(TreeNode)null);
}
}

其中"005000000000"是我指派给根节点的id(我设置id/fatherid为string类型的),"(TreeNode)null"为设置初始节点的TreeNode为空。下面的方法,

可以放在工程的任何位置,达到重用的目的。

//递归添加树的节点
publicvoidAddTree(DataTabledt,TreeViewtv,stringNodeText,stringNewNode,stringFatherID,TreeNodepNode)
{
DataViewdvTree=newDataView(dt);
//过滤FatherID,得到当前的所有子节点
dvTree.RowFilter="fatherid="+FatherID;
foreach(DataRowViewRowindvTree)
{
TreeNodeNode=newTreeNode();
if(pNode==null)
{//添加根节点
Node.Text=Row[NodeText].ToString();
tv.Nodes.Add(Node);
Node.Expanded=true;
AddTree(dt,tv,NodeText,NewNode,Row[NewNode].ToString(),Node);//再次递归
}
else
{//添加当前节点的子节点
Node.Text=Row[NodeText].ToString().ToString();
pNode.ChildNodes.Add(Node);
Node.Expanded=true;
AddTree(dt,tv,NodeText,NewNode,Row[NewNode].ToString(),Node);//再次递归
}
}
}

[code]************************************************************************************

//获取当前节点路径text>>输入需要获取的节点名称,此函数返回该节点路径

staticstringvaluePath=null;
publicstringSearchNode(TreeNodeCollectiontnds,stringtext)
{

foreach(TreeNodetndintnds)
{
if(tnd.Text==text)
{
if(valuePath==null)
valuePath=tnd.ValuePath.ToString();
}
else
{
if(tnd.ChildNodes.Count!=0)
{
SearchNode(tnd.ChildNodes,text);
}
}
}
returnvaluePath;
}

[/code]
***********************************************************************************

//获取当前节点的子节点mynode>>当前节点;nodepath>>当前节点的路径
publicvoidprinttree(TreeNodemynode,stringNodePath)
{
if(NodePath!=mynode.ValuePath)
Response.Write(mynode.Value.ToString()+"");
NodePath=null;//将路径值归0,不显示当前节点,如果获取的节点要包括当前节点,将样式的两行去掉
if(mynode.ChildNodes.Count!=0)
{
foreach(TreeNodetempnodeinmynode.ChildNodes)
{
printtree(tempnode,NodePath);
}
}
}


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