閱讀719 返回首頁    go 技術社區[雲棲]


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>

現在的問題變成了如何將數據表根據“類別號”修改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&"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

  上一篇:go 充分利用ASP.NET的三種緩存提高站點性能
  下一篇:go 在ASP.NET中如何用C#.NET實現基於表單的驗證