






















![]()
1
1:创建一个数据库并创建表Base_Menu
2
CREATE TABLE [dbo].[Base_Menu](
3
[menuid] [int] IDENTITY(1,1) NOT NULL,
4
[menunum] [int] NOT NULL,
5
[Name] [varchar](50) NOT NULL CONSTRAINT [DF_Base_Menu_MenuName] DEFAULT (''),
6
[URL] [varchar](50) NOT NULL CONSTRAINT [DF_Base_Menu_Reserve] DEFAULT (''),
7
[Parentid] [int] NULL,
8
[LogoUrl] [varchar](50) NULL,
9
CONSTRAINT [PK__Base_Menu__69C6B1F5] PRIMARY KEY CLUSTERED
10
(
11
[menuid] ASC
12
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY],
13
CONSTRAINT [QU_Base_Menu_menunum] UNIQUE NONCLUSTERED
14
(
15
[menunum] ASC
16
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
17
) ON [PRIMARY]
18
19
GO
20
21
22
2:创建sql过程查找上级目录
23
ALTER FUNCTION [dbo].[IsMenuParent](@ParentID INT, @Menuid INT)
24
RETURNS TINYINT
25
BEGIN
26
DECLARE @Ret TINYINT
27
DECLARE @P INT
28
WHILE @Ret IS NULL ----@Ret是返回值变量
29
BEGIN
30
SELECT @P = ParentID FROM base_menu WHERE Menuid = @Menuid
31
IF @P = @ParentID
32
BEGIN --如果父节点等于@ParentID,就表示@ParentID是@TypeID的父节点,所以就将返回值设置成1
33
SET @Ret = 1
34
END
35
ELSE
36
BEGIN
37
IF @P = 0 OR @P IS NULL
38
BEGIN --如果父节点等于-1,就表示已经查找到根节点,再也没有数据查找了,也就是说最终没找到,所以将返回值设成0
39
SET @Ret = 0
40
END
41
ELSE
42
BEGIN --如果父节点也不等于-1,表示当前没有找到根节点,还要继续查找父节点的父节点,所以将@P的值赋给@TypeID来继续查找
43
SET @Menuid = @P
44
END
45
END
46
END
47
RETURN @Ret
48
END
49
50
3:在web.config配置文件中写:
51
</connectionStrings>
52
<appSettings>
53
<add key="conStr" value="server=192.200.188.208;uid=sa;pwd=;database=数据库名字"/>
54
</appSettings>
55
56
4:在创建一个SqlHelper类做超作数据库的
57
using System;
58
using System.Data.SqlClient;
59
using System.Data;
60
using System.Collections;
61
using System.Configuration.Assemblies;
62
using System.Configuration;
63
namespace SqlData
64
{
65
public class SqlHelper
66
{
67
/// <summary>
68
///通过连接数据库的方法ConfigurationSettings.AppSettings()获取字符传为的键:conStr
69
/// </summary>
70
public static readonly string ConStr = ConfigurationSettings.AppSettings["conStr"].ToString();
71
public static void FillDataTable(string sql, DataTable dt, params SqlParameter[] param)
72
{
73
SqlConnection con = new SqlConnection(ConStr);
74
if (con.State == ConnectionState.Closed)
75
{
76
con.Open();
77
}
78
SqlDataAdapter ada = new SqlDataAdapter(sql, con);
79
foreach (SqlParameter p in param)
80
ada.SelectCommand.Parameters.Add(p);
81
ada.Fill(dt);
82
if (con.State == ConnectionState.Open)
83
{
84
con.Close();
85
con.Dispose();
86
}
87
}
88
}
89
}
90
91
92
3:在再另一个ConMenuSql类中写SQL语句
93
/// <summary>
94
/// 导航采单
95
/// </summary>
96
public const string SELECT_MENU_NAVIGATION_MENUS = "SELECT M.* FROM BASE_MENU AS M INNER JOIN BASE_MENU AS P ON DBO.[ISMENUPARENT](M.MENUID,P.MENUID) =1 OR M.MENUID=@0 WHERE P.MENUID=@1 AND P.NAME=@2";
97
98
99
4:创建一个SelectHouseInfo类写如下方法:
100
using System;
101
using System.Data;
102
using System.Configuration;
103
using System.Web;
104
using System.Web.Security;
105
using System.Web.UI;
106
using System.Web.UI.WebControls;
107
using System.Web.UI.WebControls.WebParts;
108
using System.Web.UI.HtmlControls;
109
using System.Drawing;
110
111
/// <summary>
112
/// SelectHouseInfo 的摘要说明
113
/// </summary>
114
public class SelectHouseInfo
115
{
116
public SelectHouseInfo()
117
{
118
119
}
120
121
/// <summary>
122
///定义方法做导航
123
/// 有多少级就展开多少级
124
/// </summary>
125
/// <param name="typeid"></param>
126
/// <param name="typesname"></param>
127
public void BuildNavigationMenu(Menu menuname, int Navigationselfid, int Navigationid, string NavigationName)
128
{
129
130
DataTable Menudt = GetSelectAllNavigationMenus(Navigationselfid, Navigationid, NavigationName);
131
MenuItem lii;
132
for (int i = 0; i < Menudt.Rows.Count; i++)
133
{
134
lii = new MenuItem();
135
lii.Text = Menudt.Rows[i]["Name"].ToString();
136
// lii.NavigateUrl = Menudt.Rows[i]["URL"].ToString();
137
lii.Value = Menudt.Rows[i]["menuid"].ToString();
138
MenuItem items = new MenuItem();
139
items.ImageUrl = "~/images/move_right.gif";
140
items.Selectable = false; //设置一个值不能单机该项
141
menuname.Items.Add(items);
142
items.ChildItems.Remove(items);
143
menuname.Items.Add(lii);
144
lii.Selectable = false;
145
}
146
}
147
148
/// <summary>
149
/// 导航菜单
150
/// </summary>
151
/// <param name="Navigationid"></param>
152
/// <param name="NavigationName"></param>
153
/// <returns></returns>
154
155
public DataTable GetSelectAllNavigationMenus(int NavigationSelfid, int Navigationid, string NavigationName)
156
{
157
DataTable dt = new DataTable();
158
SqlHelper.FillDataTable(ConMenuSql.SELECT_MENU_NAVIGATION_MENUS, dt, new SqlParameter("@0", NavigationSelfid),
159
new SqlParameter("@1", Navigationid),
160
new SqlParameter("@2", NavigationName));
161
return dt;
162
}
163
}
164
165
5:直接在界面上拖一个Menu控件
166
然后在界面类里load事件里写如下代码:
167
protected void Page_Load(object sender, EventArgs e)
168
{
169
if (!this.IsPostBack)
170
{
171
int navigationid = Convert.ToInt32(Request["menuid"].ToString()); //传过来的页面ID也就是在数据库中出现的ID
172
string navigationname = Server.HtmlDecode(Request["MenuName"].ToString());///传过来的页面名字
173
selecthouseinfo.BuildNavigationMenu(Menu1,navigationid, navigationid, navigationname); ///调用SelectHouseInfo类中的BuildNavigationMenu这个方法进行传参数
174
}
175
}
176
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。