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

作者:xiangwa 出处:CSDN

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

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

1<iewc:treeview id="Treeview1" name="Treeview1" runat="server">
2<iewc:treenode expanded="True" id="Treenode1" runat="server" text="信息类别列表" treenodesrc="menuone.txt"></iewc:treenode>
3</iewc:treeview>

其中menuone.txt的内容如下:

 1<treenodes>
 2<treenode ?="" navigateurl="xxcb_add.aspx?classname=蔬菜&amp;classid=01" target="main1" text="蔬菜">
 3<treenode ??="" navigateurl="xxcb_add.aspx?classname=白菜&amp;classid=0101" target="main1" text="白菜"></treenode>
 4<treenode ??="" navigateurl="xxcb_add.aspx?classname=萝卜&amp;classid=0102" target="main1" text="萝卜"></treenode>
 5<treenode ??="" navigateurl="xxcb_add.aspx?classname=黄花菜&amp;classid=0103" target="main1" text="黄花菜"></treenode>
 6</treenode>
 7<treenode ?="" navigateurl="xxcb_add.aspx?classname=水果&amp;classid=02" target="main1" text="水果">
 8<treenode ?="" navigateurl="xxcb_add.aspx?classname=苹果&amp;classid=0201" target="main1" text="苹果">
 9<treenode ??="" navigateurl="xxcb_add.aspx?classname=红富士&amp;classid=020101" target="main1" text="红富士"></treenode>
10<treenode ??="" navigateurl="xxcb_add.aspx?classname=其它苹果&amp;classid=020102" target="main1" text="其它苹果"></treenode>
11</treenode>
12<treenode ??="" navigateurl="xxcb_add.aspx?classname=桃子&amp;classid=0202" target="main1" text="桃子"></treenode>
13<treenode ??="" navigateurl="xxcb_add.aspx?classname=荔枝&amp;classid=0203" target="main1" text="荔枝"></treenode>
14</treenode>
15<treenode ?="" navigateurl="xxcb_add.aspx?classname=粮食&amp;classid=03" target="main1" text="粮食">
16<treenode ??="" navigateurl="xxcb_add.aspx?classname=大米&amp;classid=0301" target="main1" text="大米"></treenode>
17<treenode ??="" navigateurl="xxcb_add.aspx?classname=玉米&amp;classid=0302" target="main1" text="玉米"></treenode>
18</treenode>
19</treenodes>

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

Imports System.IO
Dim txtwriter As StreamWriter
txtwriter = File.CreateText(Server.MapPathstrpath ("\menuone.txt"))
txtwriter.WriteLine("

  1<treenodes>") 
  2
  3Dim objConn As OleDbConnection   
  4Dim objCmd As OleDbCommand   
  5Dim objRead As OleDbDataReader   
  6Dim strSQL, strDSN As String   
  7Dim strid, strname, strid1, strname1 As String   
  8Dim strand As String   
  9strand = "&amp;"   
 10  
 11  
 12Dim i, j, k, m As Integer   
 13i = 0   
 14j = 0   
 15k = 0   
 16m = 0 
 17
 18strSQL = "select * from class order by classid " 
 19
 20objConn = New OleDbConnection(ConfigurationSettings.AppSettings("connString"))   
 21objCmd = New OleDbCommand(strSQL, objConn)   
 22objCmd.Connection.Open()   
 23objRead = objCmd.ExecuteReader() 
 24
 25While objRead.Read()   
 26  
 27If j = 0 Then   
 28j = Len(Trim(objRead.Item("classid")))   
 29Else   
 30strid = strid1   
 31strname = strname1   
 32i = Len(Trim(objRead.Item("classid"))) 
 33
 34k = i - j 
 35
 36Select Case k   
 37Case Is &gt; 0   
 38txtwriter.WriteLine("<treenode navigateurl='xxcb_add.aspx?classname=" &amp; strname &amp; "" &amp; strand &amp; "classid=" &amp; strid &amp; "' target="main1" text='" &amp; strname &amp; "'>")   
 39Case Is = 0   
 40txtwriter.WriteLine("<treenode navigateurl='xxcb_add.aspx?classname=" &amp; strname &amp; "" &amp; strand &amp; "classid=" &amp; strid &amp; "' target="main1" text='" &amp; strname &amp; "'></treenode>")   
 41Case Is &lt; 0   
 42txtwriter.WriteLine("<treenode navigateurl='xxcb_add.aspx?classname=" &amp; strname &amp; "" &amp; strand &amp; "classid=" &amp; strid &amp; "' target="main1" text='" &amp; strname &amp; "'></treenode>")   
 43'txtwriter.WriteLine("</treenode>") 
 44
 45m = k   
 46While m &lt; 0   
 47txtwriter.WriteLine("")   
 48m = m + 2   
 49End While 
 50
 51End Select 
 52
 53j = Len(Trim(objRead.Item("classid"))) 
 54
 55End If 
 56
 57strid1 = Trim(objRead.Item("classid"))   
 58strname1 = Trim(objRead.Item("classname")) 
 59
 60End While 
 61
 62'strid = strid1   
 63'strname = strname1   
 64i = Len(strid)   
 65k = j - i   
 66strid = strid1   
 67strname = strname1   
 68Select Case k   
 69Case Is &gt; 0   
 70txtwriter.WriteLine("<treenode navigateurl='xxcb_add.aspx?classname=" &amp; strname &amp; "" &amp; strand &amp; "classid=" &amp; strid &amp; "' target="main1" text='" &amp; strname &amp; "'></treenode>")   
 71'txtwriter.WriteLine("") 
 72
 73m = Len(strid) / 2 
 74
 75While m &gt; 1   
 76txtwriter.WriteLine("")   
 77m = m - 1   
 78End While   
 79Case Is = 0   
 80txtwriter.WriteLine("<treenode navigateurl='xxcb_add.aspx?classname=" &amp; strname &amp; "" &amp; strand &amp; "classid=" &amp; strid &amp; "' target="main1" text='" &amp; strname &amp; "'></treenode>")   
 81'txtwriter.WriteLine("")   
 82m = Len(strid) / 2 
 83
 84While m &gt; 1   
 85txtwriter.WriteLine("")   
 86m = m - 1   
 87End While   
 88Case Is &lt;= 0   
 89txtwriter.WriteLine("<treenode navigateurl='xxcb_add.aspx?classname=" &amp; strname &amp; "" &amp; strand &amp; "classid=" &amp; strid &amp; "' target="main1" text='" &amp; strname &amp; "'></treenode>")   
 90'txtwriter.WriteLine("") 
 91
 92m = Len(strid) / 2 
 93
 94While m &gt; 1   
 95txtwriter.WriteLine("")   
 96m = m - 1   
 97End While 
 98
 99End Select   
100txtwriter.WriteLine("</treenodes>

")
txtwriter.Close()

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

Published At
Categories with Web编程
Tagged with
comments powered by Disqus