在一次项目开发中,客户要求用三级导航栏,网上框架大部分都是二级,layui2.0框架中已经有了,并没有开源,其他都是用jQuery构建json格式数据,结合bootstrap或者easyui,本文方法使用递归解决,直接源码!
数据库 表名 t_auth
aid | aname | apid |
---|---|---|
1 | 一级目录 | 0 |
11 | 二级目录 | 1 |
12 | 二级目录 | 1 |
111 | 三级目录 | 11 |
112 | 三级目录 | 11 |
121 | 三级目录 | 12 |
122 | 三级目录 | 12 |
2 | 一级目录 | 0 |
21 | 二级目录 | 2 |
22 | 二级目录 | 2 |
3 | 一级目录 | 0 |
1.前端
<form runat ="server">
<asp:TreeView runat="server" ID="Tree"></asp:TreeView>
</form>
2.后台
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class treeviewss : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Menu();
}
public void Menu()
{
DataSet ds = sqlHelper.getdataSet("select * from t_auth");
DataTable dt = ds.Tables[0];
DataRow[] children_node = dt.Select("apid = " + 0); //找到node的所有的子节点
//SortedList sl = new SortedList();
for (int i = 0; i < children_node.Length; i++)
{
TreeNode node = new TreeNode();
node.Text = children_node[i]["aname"].ToString();
node.Value = children_node[i]["aid"].ToString();
//sl.Add(node.Value, node);
Tree.Nodes.Add(node);
int apid = int.Parse(node.Value);
DataRow[] children_node_son = dt.Select("apid = " + apid); //找到node的所有的子节点
getChildNode(children_node_son, apid,node,dt);
}
}
private static void getChildNode(DataRow[] children_node_son, int apid, TreeNode node, DataTable dt)
{
for (int i = 0; i < children_node_son.Length; i++)
{
//依次将每一个子节点放入到node的children中
TreeNode node_son = new TreeNode();
node_son.Value = children_node_son[i]["aid"].ToString(); ; //然后获得子节点的子节点
node_son.Text = children_node_son[i]["aname"].ToString();
int apidson = int.Parse(node_son.Value);
DataRow[] children_node_sons = dt.Select("apid = " + apidson); //找到node的所有的子节点
if(children_node_sons.Length == 0)
{
node_son.Target = "frmright";
node.ChildNodes.Add(node_son);
}
else
{
node.ChildNodes.Add(node_son);
int apidsons = int.Parse(node_son.Value);
DataRow[] children_node_sonss = dt.Select("apid = " + apidsons); //找到node的所有的子节点
getChildNode(children_node_sonss, apidsons,node_son,dt);
}
}
}
}
3 效果图