当前位置: 首页 > 图文教程 > 网络编程 > ASP.NET > ASP.NET中不定级动态菜单的实现

ASP.NET
灵活正确的实现.NET插件机制
在Asp.net中为图像加入版权信息
重构Session确实让代码简洁干净了不少
JSP与ASP.Net之间的Session值共享
如何获取当前程序文件的路径 Current Path
在.NET框架应用程序中发送电子邮件
asp.net开发wap程序必备:识别来访手机品牌型号
ASP.NET 2.0中使用自定义provider
asp.net开发wap必备:更好的匹配手机设备
用ashx动态生成文件
ASP.NET中17种正则表达式
提高ASP.Net应用程序性能的十大方法
一个通过web.Mail发送邮件的类
在DataGrid里面根据日期的不同显示new图标
Asp.Net细节性问题精萃
自定义控件中使用枚举类型的属性(原创)
.NET开发 正则表达式中的 Bug
.Net学习:IronPython分析Lambda表达式
ASP.NET中的Response对象的方法
在ASP.NET 2.0中数据绑定的实现方法

ASP.NET中不定级动态菜单的实现


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-08-14   浏览: 121 ::
收藏到网摘: n/a

作者:xiangwa出处:CSDN

 前日,根据客户需要,要根据如下的表动态生成如下的菜单:表中的数据是动态更新的。

我们平时IEWebContr来做菜单时都是在html中直接输入,也就是说是静态的,现在要做成动态的,而且菜单级数不定,怎么来实现呢?笔者通过研究发现,用IEWebContr来做菜单时,菜单项可以直接输入,也可以用如下的方法指定从某一个文件中读取菜单项:

 <iewc:TreeViewrunat="server"ID="Treeview1"NAME="Treeview1">
<iewc:TreeNodeid="Treenode1"runat="server"TreeNodeSrc="menuone.txt"Expanded="True"Text="信息类别列表"></iewc:TreeNode>
</iewc:TreeView>

其中menuone.txt的内容如下:

<TREENODES>
<treenodetext='蔬菜'NavigateUrl='xxcb_add.aspx?classname=蔬菜&classid=01'?Target='main1'>
<treenodetext='白菜'NavigateUrl='xxcb_add.aspx?classname=白菜&classid=0101'??Target='main1'/>
<treenodetext='萝卜'NavigateUrl='xxcb_add.aspx?classname=萝卜&classid=0102'??Target='main1'/>
<treenodetext='黄花菜'NavigateUrl='xxcb_add.aspx?classname=黄花菜&classid=0103'??Target='main1'/>
</treenode>
<treenodetext='水果'NavigateUrl='xxcb_add.aspx?classname=水果&classid=02'?Target='main1'>
<treenodetext='苹果'NavigateUrl='xxcb_add.aspx?classname=苹果&classid=0201'?Target='main1'>
<treenodetext='红富士'NavigateUrl='xxcb_add.aspx?classname=红富士&classid=020101'??Target='main1'/>
<treenodetext='其它苹果'NavigateUrl='xxcb_add.aspx?classname=其它苹果&classid=020102'??Target='main1'/>

 </treenode>
<treenodetext='桃子'NavigateUrl='xxcb_add.aspx?classname=桃子&classid=0202'??Target='main1'/>
<treenodetext='荔枝'NavigateUrl='xxcb_add.aspx?classname=荔枝&classid=0203'??Target='main1'/>
</treenode>
<treenodetext='粮食'NavigateUrl='xxcb_add.aspx?classname=粮食&classid=03'?Target='main1'>
<treenodetext='大米'NavigateUrl='xxcb_add.aspx?classname=大米&classid=0301'??Target='main1'/>
<treenodetext='玉米'NavigateUrl='xxcb_add.aspx?classname=玉米&classid=0302'??Target='main1'/>
</treenode>
</TREENODES>

现在的问题变成了如何将数据表根据“类别号”修改menuone.txt文件。将该过程放在对数据表修改后进行。下面是根据表的内容生成menuone.txt的源代码:


 ImportsSystem.IO
DimtxtwriterAsStreamWriter
txtwriter=File.CreateText(Server.MapPathstrpath("\menuone.txt"))
txtwriter.WriteLine("<TREENODES>")

DimobjConnAsOleDbConnection
DimobjCmdAsOleDbCommand
DimobjReadAsOleDbDataReader
DimstrSQL,strDSNAsString
Dimstrid,strname,strid1,strname1AsString
DimstrandAsString
strand="&amp;"


Dimi,j,k,mAsInteger
i=0
j=0
k=0
m=0

strSQL="select*fromclassorderbyclassid"

objConn=NewOleDbConnection(ConfigurationSettings.AppSettings("connString"))
objCmd=NewOleDbCommand(strSQL,objConn)
objCmd.Connection.Open()
objRead=objCmd.ExecuteReader()

WhileobjRead.Read()

Ifj=0Then
j=Len(Trim(objRead.Item("classid")))
Else
strid=strid1
strname=strname1
i=Len(Trim(objRead.Item("classid")))

k=i-j

SelectCasek
CaseIs>0
txtwriter.WriteLine("<treenodetext='"&strname&"'NavigateUrl='xxcb_add.aspx?classname="&strname&""&strand&"classid="&strid&"'Target='main1'>")
CaseIs=0
txtwriter.WriteLine("<treenodetext='"&strname&"'NavigateUrl='xxcb_add.aspx?classname="&strname&""&strand&"classid="&strid&"'Target='main1'/>")
CaseIs<0
txtwriter.WriteLine("<treenodetext='"&strname&"'NavigateUrl='xxcb_add.aspx?classname="&strname&""&strand&"classid="&strid&"'Target='main1'/>")
'txtwriter.WriteLine("</treenode>")

m=k
Whilem<0
txtwriter.WriteLine("</treenode>")
m=m+2
EndWhile

EndSelect

j=Len(Trim(objRead.Item("classid")))

EndIf

strid1=Trim(objRead.Item("classid"))
strname1=Trim(objRead.Item("classname"))

EndWhile

'strid=strid1
'strname=strname1
i=Len(strid)
k=j-i
strid=strid1
strname=strname1
SelectCasek
CaseIs>0
txtwriter.WriteLine("<treenodetext='"&strname&"'NavigateUrl='xxcb_add.aspx?classname="&strname&""&strand&"classid="&strid&"'Target='main1'/>")
'txtwriter.WriteLine("</treenode>")

m=Len(strid)/2

Whilem>1
txtwriter.WriteLine("</treenode>")
m=m-1
EndWhile
CaseIs=0
txtwriter.WriteLine("<treenodetext='"&strname&"'NavigateUrl='xxcb_add.aspx?classname="&strname&""&strand&"classid="&strid&"'Target='main1'/>")
'txtwriter.WriteLine("</treenode>")
m=Len(strid)/2

Whilem>1
txtwriter.WriteLine("</treenode>")
m=m-1
EndWhile
CaseIs<=0
txtwriter.WriteLine("<treenodetext='"&strname&"'NavigateUrl='xxcb_add.aspx?classname="&strname&""&strand&"classid="&strid&"'Target='main1'/>")
'txtwriter.WriteLine("</treenode>")

m=Len(strid)/2

Whilem>1
txtwriter.WriteLine("</treenode>")
m=m-1
EndWhile

EndSelect
txtwriter.WriteLine("</TREENODES>")
txtwriter.Close()

这样menuone.txt就按要求生成了菜单源文件。