我使用的是递归是实现无限级树形菜单:
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Data.SqlClient;
namespace Power.Sbtree
{
public partial class Left : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
showTree();
}
private void addChildNode(TreeNode parent, string parentID)
{
//获得以parent的ID为父节点的子结点
DataTable dtChild = SqlHelper.ExecSQLDataTable("select * from tab_Sbtree where Sb_parentID='" + parentID + "'");
if (dtChild.Rows.Count > 0)
{
for (int i = 0; i < dtChild.Rows.Count; i++)
{
//TreeNode node1 = parent.ChildNodes.Add(dtChild.Rows[i][0].ToString().Trim(), dtChild.Rows[i][1].ToString().Trim(), 1);
TreeNode node1 = new TreeNode();
node1.Text = dtChild.Rows[i][1].ToString().Trim();
parent.ChildNodes.Add(node1);
addChildNode(node1, dtChild.Rows[i][0].ToString().Trim());
}
}
}
private void showTree()
{
try
{
treeView1.Nodes.Clear();
DataTable dtEquipment = SqlHelper.ExecSQLDataTable("select * from tab_Sbtree where Sb_parentID='0'"); //读总根结点
for(int i =0;i<dtEquipment.Rows.Count;i++)
{
TreeNode node0 = new TreeNode();
node0.Text= dtEquipment.Rows[i][1].ToString().Trim();
treeView1.Nodes.Add(node0);//根节点
addChildNode(node0, dtEquipment.Rows[i][0].ToString().Trim());
}
}
catch (SqlException ex)
{
//MessageBox.Show("数据库访问异常" + ex.Message.ToString(), "错误提示框", MessageBoxButtons.OK, MessageBoxIcon.Error);
Response.Write("<Script Language=JavaScript>alert('数据库访问异常!')</Script>");
}
}
protected void treeView1_SelectedNodeChanged(object sender, EventArgs e)
{
}
protected void treeView1_TreeNodeCheckChanged(object sender, TreeNodeEventArgs e)
{
// Session["tree"]=treeView1.test;
}
}
}
我这借助的使用了sqlhelper 这个工具类,效果如下图
下面是我的数据库
这就是一个简单的树形菜单。