步骤:
1.新建一个页面,假如说叫VerticalMenu
2.把html代码copy到html代码区
3.把LoadTopMenu方法copy到cs代码区
4.运行即可
-------------------------------------
1.html代码
<
STYLE
type
="text/css"
>
A:link
{}
{
COLOR
:
#000000
;
FONT-SIZE
:
12px
;
TEXT-DECORATION
:
none
}
A:visited
{}
{
COLOR
:
#000000
;
FONT-SIZE
:
12px
;
TEXT-DECORATION
:
none
}
A:hover
{}
{
COLOR
:
#006CD9
;
FONT-SIZE
:
12px
;
TEXT-DECORATION
:
none
}
BODY
{}
{
FONT-SIZE
:
12px
;
}
TD
{}
{
FONT-SIZE
:
12px
;
line-height
:
150%
}
</
STYLE
>
<
script
language
="JavaScript"
>
<!--
function
showitem(id,name)
{
//
打开弹出式页面
//
return ("<span><a href='"+id+"' target=_blank>"+name+"</a></span><br>")
//
在框架中打开
return
(
"
<span><a href='#' onclick=\
"
url('
"
+id+
"
');\
"
>
"
+
name
+
"
</a></span><br>
"
)
}
function
url(id)
{
var
source
=
document.getElementById('fMain');
source.src
=
id;
}
function
switchoutlookBar(number)
{
var
i
=
outlookbar.opentitle;
outlookbar.opentitle
=
number;
var
id1,id2,id1b,id2b
if
(number
!=
i
&&
outlooksmoothstat
==
0
)
{
if
(number
!=-
1
)
{
if
(i
==-
1
)
{
id2
=
"
blankdiv
"
;
id2b
=
"
blankdiv
"
;
}
else
{
id2
=
"
outlookdiv
"
+
i;
id2b
=
"
outlookdivin
"
+
i;
document.all(
"
outlooktitle
"
+
i).style.border
=
"
1px none navy
"
;
document.all(
"
outlooktitle
"
+
i).style.background
=
outlookbar.maincolor;
document.all(
"
outlooktitle
"
+
i).style.color
=
"
#ffffff
"
;
document.all(
"
outlooktitle
"
+
i).style.textalign
=
"
center
"
;
}
id1
=
"
outlookdiv
"
+
number
id1b
=
"
outlookdivin
"
+
number
document.all(
"
outlooktitle
"
+
number).style.border
=
"
1px none white
"
;
document.all(
"
outlooktitle
"
+
number).style.background
=
outlookbar.maincolor;
//
title
document.all(
"
outlooktitle
"
+
number).style.color
=
"
#ffffff
"
;
document.all(
"
outlooktitle
"
+
number).style.textalign
=
"
center
"
;
smoothout(id1,id2,id1b,id2b,
0
);
}
else
{
document.all(
"
blankdiv
"
).style.display
=
""
;
document.all(
"
blankdiv
"
).sryle.height
=
"
100%
"
;
document.all(
"
outlookdiv
"
+
i).style.display
=
"
none
"
;
document.all(
"
outlookdiv
"
+
i).style.height
=
"
0%
"
;
document.all(
"
outlooktitle
"
+
i).style.border
=
"
1px none navy
"
;
document.all(
"
outlooktitle
"
+
i).style.background
=
outlookbar.maincolor;
document.all(
"
outlooktitle
"
+
i).style.color
=
"
#ffffff
"
;
document.all(
"
outlooktitle
"
+
i).style.textalign
=
"
center
"
;
}
}
}
function
smoothout(id1,id2,id1b,id2b,stat)
{
if
(stat
==
0
)
{
tempinnertext1
=
document.all(id1b).innerHTML;
tempinnertext2
=
document.all(id2b).innerHTML;
document.all(id1b).innerHTML
=
""
;
document.all(id2b).innerHTML
=
""
;
outlooksmoothstat
=
1
;
document.all(id1b).style.overflow
=
"
hidden
"
;
document.all(id2b).style.overflow
=
"
hidden
"
;
document.all(id1).style.height
=
"
0%
"
;
document.all(id1).style.display
=
""
;
setTimeout(
"
smoothout('
"
+
id1
+
"
','
"
+
id2
+
"
','
"
+
id1b
+
"
','
"
+
id2b
+
"
',
"
+
outlookbar.inc
+
"
)
"
,outlookbar.timedalay);
}
else
{
stat
+=
outlookbar.inc;
if
(stat
>
100
)
stat
=
100
;
document.all(id1).style.height
=
stat
+
"
%
"
;
document.all(id2).style.height
=
(
100
-
stat)
+
"
%
"
;
if
(stat
<
100
)
setTimeout(
"
smoothout('
"
+
id1
+
"
','
"
+
id2
+
"
','
"
+
id1b
+
"
','
"
+
id2b
+
"
',
"
+
stat
+
"
)
"
,outlookbar.timedalay);
else
{
document.all(id1b).innerHTML
=
tempinnertext1;
document.all(id2b).innerHTML
=
tempinnertext2;
outlooksmoothstat
=
0
;
document.all(id1b).style.overflow
=
"
auto
"
;
document.all(id2).style.display
=
"
none
"
;
}
}
}
function
getOutLine()
{
outline
=
"
<table
"
+
outlookbar.otherclass
+
"
>
"
;
for
(i
=
0
;i
<
(outlookbar.titlelist.length);i
++
)
{
outline
+=
"
<tr><td name=outlooktitle
"
+
i
+
"
id=outlooktitle
"
+
i
+
"
"
;
if
(i
!=
outlookbar.opentitle)
outline
+=
"
nowrap align=center style='cursor:hand;background-color:
"
+
outlookbar.maincolor
+
"
;color:#ffffff;height:20;border:1 none navy'
"
;
else
outline
+=
"
nowrap align=center style='cursor:hand;background-color:
"
+
outlookbar.maincolor
+
"
;color:white;height:20;border:1 none white'
"
;
outline
+=
outlookbar.titlelist[i].otherclass
outline
+=
"
onclick='switchoutlookBar(
"
+
i
+
"
)'><span class=smallFont>
"
;
outline
+=
outlookbar.titlelist[i].title
+
"
</span></td></tr>
"
;
outline
+=
"
<tr><td name=outlookdiv
"
+
i
+
"
valign=top align=center id=outlookdiv
"
+
i
+
"
style='width:100%
"
if
(i
!=
outlookbar.opentitle)
outline
+=
"
;display:none;height:0%;
"
;
else
outline
+=
"
;display:;height:100%;
"
;
outline
+=
"
'><div name=outlookdivin
"
+
i
+
"
id=outlookdivin
"
+
i
+
"
style='overflow:auto;width:100%;height:100%'>
"
;
for
(j
=
0
;j
<
outlookbar.itemlist[i].length;j
++
)
outline
+=
showitem(outlookbar.itemlist[i][j].key,outlookbar.itemlist[i][j].title);
outline
+=
"
</div></td></tr>
"
}
outline
+=
"
</table>
"
return
outline
}
function
show()
{
var
outline;
outline
=
"
<div id=outLookBarDiv name=outLookBarDiv style='width=100%;height:100%'>
"
outline
+=
outlookbar.getOutLine();
outline
+=
"
</div>
"
document.write(outline);
}
function
theitem(intitle,instate,inkey)
{
this
.state
=
instate;
this
.otherclass
=
"
nowrap
"
;
this
.key
=
inkey;
this
.title
=
intitle;
}
function
addtitle(intitle)
{
outlookbar.itemlist[outlookbar.titlelist.length]
=
new
Array();
outlookbar.titlelist[outlookbar.titlelist.length]
=
new
theitem(intitle,
1
,
0
);
return
(outlookbar.titlelist.length
-
1
);
}
function
additem(intitle,parentid,inkey)
{
if
(parentid
>=
0
&&
parentid
<=
outlookbar.titlelist.length)
{
outlookbar.itemlist[parentid][outlookbar.itemlist[parentid].length]
=
new
theitem(intitle,
2
,inkey);
outlookbar.itemlist[parentid][outlookbar.itemlist[parentid].length
-
1
].otherclass
=
"
nowrap align=left style='height:5'
"
;
return
(outlookbar.itemlist[parentid].length
-
1
);
}
else
additem
=-
1
;
}
function
outlook()
{
this
.titlelist
=
new
Array();
this
.itemlist
=
new
Array();
this
.divstyle
=
"
style='height:100%;width:100%;overflow:auto' align=center
"
;
//
可以在这里设置对齐方式
this
.otherclass
=
"
border=0 cellspacing='0' cellpadding='0' style='height:100%;width:100%'valign=middle align=center
"
;
this
.addtitle
=
addtitle;
this
.additem
=
additem;
this
.starttitle
=-
1
;
this
.show
=
show;
this
.getOutLine
=
getOutLine;
this
.opentitle
=
this
.starttitle;
this
.reflesh
=
outreflesh;
this
.timedelay
=
50
;
this
.inc
=
10
;
this
.maincolor
=
"
#336699
"
}
function
outreflesh()
{
document.all(
"
outLookBarDiv
"
).innerHTML
=
outlookbar.getOutLine();
}
function
locatefold(foldname)
{
if
(foldname
==
""
)
foldname
=
outlookbar.titlelist[
0
].title
for
(
var
i
=
0
;i
<
outlookbar.titlelist.length;i
++
)
{
if
(foldname
==
outlookbar.titlelist[i].title)
{
outlookbar.starttitle
=
i;
outlookbar.opentitle
=
i;
}
}
}
var
outlookbar
=
new
outlook();
var
tempinnertext1,tempinnertext2,outlooksmoothstat
outlooksmoothstat
=
0
;
<%=
LoadVerticalMenu()
%>
//
从数据库产生垂直菜单
//
-->
</
script
>
<
table
id
="mnuList"
style
="WIDTH:150px;HEIGHT: 100%"
cellspacing
="0"
cellpadding
="0"
align
="left"
border
="0"
>
<
tr
>
<
td
bgcolor
="#F0F0E5"
id
="outLookBarShow"
style
="HEIGHT: 100%"
valign
="top"
align
="middle"
name
="outLookBarShow"
>
<
script
language
="JavaScript"
>
<!--
locatefold(
""
)
outlookbar.show()
//
-->
</
script
>
</
td
>
</
tr
>
</
table
>
2.cs代码
public
class
VerticalMenu : System.Web.UI.Page
{
protected
DataRow[] father;
protected
DataRow[] first;
private
void
Page_Load(
object
sender, System.EventArgs e)
{
//
模拟QQ菜单
}
public
static
string
ConnectionString
=
System.Configuration .ConfigurationSettings .AppSettings[
"
ConnectionString
"
];
GetDataSet
#region
GetDataSet
public
static
DataSet GetDataSet(
string
sql)
{
SqlDataAdapter sda
=
new
SqlDataAdapter(sql,ConnectionString);
DataSet ds
=
new
DataSet();
sda.Fill(ds);
return
ds;
}
#endregion
protected
string
LoadVerticalMenu()
{
string
sqlFather
=
"
select * from PowerSetting
"
;
DataSet dsFather
=
GetDataSet(sqlFather);
father
=
dsFather.Tables[
0
].Select(
"
IsBoot=0
"
,
"
IsBoot
"
);
string
menu
=
""
;
foreach
(DataRow drfather
in
father)
{
menu
+=
"
var t;
"
;
menu
+=
"
t=outlookbar.addtitle('
"
+
drfather[
"
Description
"
]
+
"
');
"
;
first
=
dsFather.Tables[
0
].Select(
"
ParentID='
"
+
Convert.ToInt32(drfather[
"
ParentID
"
])
+
"
' and IsBoot=1
"
,
"
IsBoot
"
);
foreach
(DataRow drfirst
in
first)
{
menu
+=
"
outlookbar.additem('
"
+
drfirst[
"
Description
"
]
+
"
',t,'
"
+
drfirst[
"
Url
"
]
+
"
');
"
;
}
}
return
menu;
}
Web Form Designer generated code
#region
Web Form Designer generated code
override
protected
void
OnInit(EventArgs e)
{
//
//
CODEGEN: This call is required by the ASP.NET Web Form Designer.
//
InitializeComponent();
base
.OnInit(e);
}
/**/
/**/
/**/
///
<summary>
///
Required method for Designer support - do not modify
///
the contents of this method with the code editor.
///
</summary>
private
void
InitializeComponent()
{
this
.Load
+=
new
System.EventHandler(
this
.Page_Load);
}
#endregion
}
3.数据库脚本
if
exists
(
select
*
from
dbo.sysobjects
where
id
=
object_id
(N
'
[dbo].[PowerSetting]
'
)
and
OBJECTPROPERTY
(id, N
'
IsUserTable
'
)
=
1
)
drop
table
[
dbo
]
.
[
PowerSetting
]
GO
CREATE
TABLE
[
dbo
]
.
[
PowerSetting
]
(
[
PowerSettingID
]
[
int
]
IDENTITY
(
1
,
1
)
NOT
NULL
,
--
id
[
ParentID
]
[
int
]
NOT
NULL
,
--
父节点id
[
Description
]
[
nvarchar
]
(
255
) COLLATE Chinese_PRC_CI_AS
NULL
,
--
菜单描述内容
[
Icon
]
[
nvarchar
]
(
50
) COLLATE Chinese_PRC_CI_AS
NULL
,
--
要显示图标
[
Url
]
[
nvarchar
]
(
255
) COLLATE Chinese_PRC_CI_AS
NULL
,
--
url
[
Target
]
[
nvarchar
]
(
50
) COLLATE Chinese_PRC_CI_AS
NULL
,
--
_self,_blank等
[
CreateByID
]
[
nvarchar
]
(
50
) COLLATE Chinese_PRC_CI_AS
NULL
,
--
创建人id
[
CreateON
]
[
datetime
]
NULL
,
--
创建日期
[
IsEnabled
]
[
bit
]
NULL
,
--
是否可用
[
IsBoot
]
[
int
]
NULL
--
是不是根节点;1是其他不是
)
ON
[
PRIMARY
]
GO