数据结构如下:
MenuID MenuName MParentID MenuLevel
1001 菜单1 0 0
1002 菜单2 0 0
1003 菜单3 0 0
1004 菜单4 0 0
2001 菜单11 1001 1
2002 菜单12 1001 1
2003 菜单21 1002 1
3001 菜单111 2001 2
方法解析:
先从数据集中获得数据,递归对增加菜单
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 数形菜单 : System.Web.UI.Page
{
#region 全局变量
DataSet ds = new DataSet();
#endregion
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
ds = this.CreateDataSet();
this.AddTreeMenu(tvMenu.Nodes, "0");
}
}
/// <summary>
/// 增加树形菜单的各个项
/// </summary>
/// <param name="tnc"></param>
/// <param name="parentID"></param>
protected void AddTreeMenu(TreeNodeCollection tnc,string parentID)
{
DataView dv = new DataView();
dv.Table = ds.Tables["Menu"];//这里非常关键,不能够写成dv=ds.Tables["Menu"].DefaltView,否则将会出错
dv.RowFilter = "MParentID='" + parentID + "'";
if (dv.Count != 0)
{
TreeNode tn;
for (int i = 0; i < dv.Count; i++)
{
traceMessage.InnerHtml += i + "<br>";
tn = new TreeNode();
tn.Text = dv[i]["MenuName"].ToString();
tn.Value= dv[i]["MenuID"].ToString();
tnc.Add(tn);
traceMessage.InnerHtml += dv.Count+"<br>";
AddTreeMenu(tn.ChildNodes, tn.Value);
}
}
}
/// <summary>
/// 创建菜单数据
/// </summary>
/// <returns></returns>
protected DataSet CreateDataSet()
{
SqlConnection sc = new SqlConnection();
sc.ConnectionString = ConfigurationSettings.AppSettings["connStr"];
SqlCommand comm = sc.CreateCommand();
comm.CommandText = "select * from Menu";
DataSet ds=new DataSet();
SqlDataAdapter da=new SqlDataAdapter(comm);
da.Fill(ds,"Menu");
return ds;
}
}