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

ASP.NET
运行时修改Web.config中的元素值
优秀的Architect之路(入门)
提问的智慧(HowToAskQuestionsTheSmartWay)
C#数据结构篇(3队列类)
现在就可下载WTL7.0和.NETSP1
在.NET中开发组件
使用.NET远程处理访问其他应用程序域中的对象
使用ADO.NET访问数据库
承载.NET公共语言运行库
在.NET运行时了解类型信息(2)
在.NET运行时了解类型信息(3)
智能客户端(SmartClient)
获取数据库表结构
Visual Studio 2005 分包下载
为DataGrid中的行增加序号
关于HttpContext的Items属性
[推荐].NET XML Best Practices - Choosing an XML API
在 XML Schema和WSDL中使用名称空间
在论坛里为什么不能发问题
AspectSharp例子分析

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-08-14   浏览: 111 ::
收藏到网摘: 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就按要求生成了菜单源文件。