动态菜单绑定






4.80/5 (2投票s)
大家好…… 很多人都在尝试或致力于动态绑定菜单。我这里有一个解决方案,我将提供示例代码来
大家好。
很多人都在尝试或致力于动态绑定菜单。我有一个解决方案。
这里,我将提供示例代码来动态创建菜单。
MenuTest.aspx
<asp:Menu ID="Menu1" runat="server" Orientation="Horizontal">
</asp:Menu>
MenuTest.aspx.cs
static string constr = "SQLOLEDB;Data Source=ABC;Integrated Security=SSPI;Initial Catalog=XYZ";
OleDbConnection cn = new OleDbConnection(constr);
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
PopulateRootLevel();
}
private void PopulateRootLevel()
{
OleDbCommand objCommand = new OleDbCommand(@"select id,title,(select count(*) FROM SampleCategories WHERE parentid=sc.id) childnodecount FROM SampleCategories sc where parentID IS NULL", cn);
OleDbDataAdapter da = new OleDbDataAdapter(objCommand);
DataTable dt = new DataTable();
da.Fill(dt);
PopulateNodes(dt, Menu1.Items);
}
private void PopulateSubLevel(int parentid, MenuItem parentMenu)
{
OleDbCommand objCommand = new OleDbCommand(@"select id,title,(select count(*) FROM SampleCategories WHERE parentid=sc.id) childnodecount FROM SampleCategories sc where parentID="+parentid+"", cn);
OleDbDataAdapter da = new OleDbDataAdapter(objCommand);
DataTable dt = new DataTable();
da.Fill(dt);
PopulateNodes(dt, parentMenu.ChildItems);
}
private void PopulateNodes(DataTable dt, MenuItemCollection items)
{
foreach (DataRow dr in dt.Rows)
{
MenuItem mi = new MenuItem
{
Text = dr["title"].ToString();
Value = dr["id"].ToString();
}
items.Add(mi);
//If node has child nodes, then enable on-demand populating
bool flag = ((int)(dr["childnodecount"]) > 0);
if (flag)
{
menuCreate(mi);
}
}
}
private void menuCreate(MenuItem m)
{
MenuEventArgs e = new MenuEventArgs(m);
PopulateSubLevel(Int32.Parse(e.Item.Value), e.Item);
}
这是数据库脚本
用于模式生成
CREATE TABLE [dbo].[SAMPLECATEGORIES](
[id] [int] IDENTITY(1,1) NOT NULL,
[parentid] [int] NULL,
[title] [nvarchar](255) COLLATE SQL_SwedishStd_Pref_CP1_CI_AS NOT NULL
)
用于测试,数据样本
INSERT INTO [dbo].[SAMPLECATEGORIES] ([id], [parentid], [title]) VALUES (1, NULL, N'Category 1')
INSERT INTO [dbo].[SAMPLECATEGORIES] ([id], [parentid], [title]) VALUES (2, NULL, N'Category 2')
INSERT INTO [dbo].[SAMPLECATEGORIES] ([id], [parentid], [title]) VALUES (3, NULL, N'Category 3')
INSERT INTO [dbo].[SAMPLECATEGORIES] ([id], [parentid], [title]) VALUES (4, 1, N'Category 1.1')
INSERT INTO [dbo].[SAMPLECATEGORIES] ([id], [parentid], [title]) VALUES (5, 1, N'Category 1.2')
INSERT INTO [dbo].[SAMPLECATEGORIES] ([id], [parentid], [title]) VALUES (6, 2, N'Category 2.1')
INSERT INTO [dbo].[SAMPLECATEGORIES] ([id], [parentid], [title]) VALUES (7, 2, N'Category 2.2')
INSERT INTO [dbo].[SAMPLECATEGORIES] ([id], [parentid], [title]) VALUES (8, 2, N'Category 2.3')
INSERT INTO [dbo].[SAMPLECATEGORIES] ([id], [parentid], [title]) VALUES (9, 7, N'Category 2.2.1')
INSERT INTO [dbo].[SAMPLECATEGORIES] ([id], [parentid], [title]) VALUES (10, 7, N'Category 2.2.2')
INSERT INTO [dbo].[SAMPLECATEGORIES] ([id], [parentid], [title]) VALUES (11, 10, N'Category 2.2.2.1')
INSERT INTO [dbo].[SAMPLECATEGORIES] ([id], [parentid], [title]) VALUES (12, 6, N'Category 2.1.1')
INSERT INTO [dbo].[SAMPLECATEGORIES] ([id], [parentid], [title]) VALUES (13, 3, N'Category 3.1')
INSERT INTO [dbo].[SAMPLECATEGORIES] ([id], [parentid], [title]) VALUES (14, 7, N'Category 2.2.3')
我希望这篇文章能帮助到你。
经过一天的研究,我编写了这段代码,它对其他人非常有帮助。
编辑历史:
2013年10月29日:将类型更改为技巧/窍门并进行了一些小的格式更正