数据结构如下:
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;
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;
}
}
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;
}
}