719
技術社區[雲棲]
ASP.NET中不定級動態菜單的實現
前日,根據客戶需要,要根據如下的表動態生成如下的菜單:表中的數據是動態更新的。我們平時IEWebContr來做菜單時都是在html中直接輸入,也就是說是靜態的,現在要做成動態的,而且菜單級數不定,怎麼來實現呢?筆者通過研究發現,用IEWebContr來做菜單時,菜單項可以直接輸入,也可以用如下的方法指定從某一個文件中讀取菜單項:
<iewc:TreeViewrunat="server"ID="Treeview1"NAME="Treeview1">
<iewc:TreeNoderunat="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>
ImportsSystem.IO
DimtxtwriterAsStreamWriter
txtwriter=File.CreateText(Server.MapPathstrpath("/menuone.txt"))
txtwriter.WriteLine("<TREENODES>")
DimobjConnAsOleDbConnection
DimobjCmdAsOleDbCommand
DimobjReadAsOleDbDataReader
DimstrSQL,strDSNAsString
Dimstrid,strname,strid1,strname1AsString
DimstrandAsString
strand="&"
Dimi,j,k,mAsInteger
i=0
j=0
k=0
m=0
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")))
SelectCasek
CaseIs>0
txtwriter.WriteLine("<treenodetext='"&strname&"'NavigateUrl='xxcb_add.aspx?classname="&strname&""&strand&"class'Target='main1'>")
CaseIs=0
txtwriter.WriteLine("<treenodetext='"&strname&"'NavigateUrl='xxcb_add.aspx?classname="&strname&""&strand&"class'Target='main1'/>")
CaseIs<0
txtwriter.WriteLine("<treenodetext='"&strname&"'NavigateUrl='xxcb_add.aspx?classname="&strname&""&strand&"class'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&"class'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&"class'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&"class'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就按要求生成了菜單源文件。
最後更新:2017-04-02 00:06:35