![]()
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
1:创建一个数据库并创建表Base_Menu2
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] ASC12
)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] ASC16
)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
GO20

21

22
2:创建sql过程查找上级目录23
ALTER FUNCTION [dbo].[IsMenuParent](@ParentID INT, @Menuid INT)24
RETURNS TINYINT25
BEGIN26
DECLARE @Ret TINYINT27
DECLARE @P INT28
WHILE @Ret IS NULL ----@Ret是返回值变量29
BEGIN30
SELECT @P = ParentID FROM base_menu WHERE Menuid = @Menuid31
IF @P = @ParentID32
BEGIN --如果父节点等于@ParentID,就表示@ParentID是@TypeID的父节点,所以就将返回值设置成133
SET @Ret = 134
END35
ELSE36
BEGIN37
IF @P = 0 OR @P IS NULL38
BEGIN --如果父节点等于-1,就表示已经查找到根节点,再也没有数据查找了,也就是说最终没找到,所以将返回值设成039
SET @Ret = 040
END41
ELSE42
BEGIN --如果父节点也不等于-1,表示当前没有找到根节点,还要继续查找父节点的父节点,所以将@P的值赋给@TypeID来继续查找43
SET @Menuid = @P44
END45
END46
END47
RETURN @Ret48
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 SqlData64
{65
public class SqlHelper66
{67
/// <summary>68
///通过连接数据库的方法ConfigurationSettings.AppSettings()获取字符传为的键:conStr69
/// </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 SelectHouseInfo115
{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也就是在数据库中出现的ID172
string navigationname = Server.HtmlDecode(Request["MenuName"].ToString());///传过来的页面名字173
selecthouseinfo.BuildNavigationMenu(Menu1,navigationid, navigationid, navigationname); ///调用SelectHouseInfo类中的BuildNavigationMenu这个方法进行传参数174
}175
}176



浙公网安备 33010602011771号