ASP.NET中不定级动态菜单的实现(附图)

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

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

〈iewc:TreeView runat="server" ID="Treeview1" NAME="Treeview1"〉
〈iewc:TreeNode id="Treenode1" runat="server" TreeNodeSrc="menuone.txt" Expanded="True" Text="信息类别列表" 〉〈/iewc:TreeNode〉
〈/iewc:TreeView〉

其中menuone.txt的内容如下:

〈TREENODES〉
〈treenode text='蔬菜' NavigateUrl='xxcb_add.aspx?classname=蔬菜&classid=01'? Target='main1'〉
〈treenode text='白菜' NavigateUrl='xxcb_add.aspx?classname=白菜&classid=0101'?? Target='main1'/〉
〈treenode text='萝卜' NavigateUrl='xxcb_add.aspx?classname=萝卜&classid=0102'?? Target='main1'/〉
〈treenode text='黄花菜' NavigateUrl='xxcb_add.aspx?classname=黄花菜&classid=0103'?? Target='main1'/〉
〈/treenode〉
〈treenode text='水果' NavigateUrl='xxcb_add.aspx?classname=水果&classid=02'? Target='main1'〉
〈treenode text='苹果' NavigateUrl='xxcb_add.aspx?classname=苹果&classid=0201'? Target='main1'〉
〈treenode text='红富士' NavigateUrl='xxcb_add.aspx?classname=红富士&classid=020101'?? Target='main1'/〉
〈treenode text='其它苹果' NavigateUrl='xxcb_add.aspx?classname=其它苹果&classid=020102'?? Target='main1'/〉
〈/treenode〉
〈treenode text='桃子' NavigateUrl='xxcb_add.aspx?classname=桃子&classid=0202'?? Target='main1'/〉
〈treenode text='荔枝' NavigateUrl='xxcb_add.aspx?classname=荔枝&classid=0203'?? Target='main1'/〉
〈/treenode〉
〈treenode text='粮食' NavigateUrl='xxcb_add.aspx?classname=粮食&classid=03'? Target='main1'〉
〈treenode text='大米' NavigateUrl='xxcb_add.aspx?classname=大米&classid=0301'?? Target='main1'/〉
〈treenode text='玉米' NavigateUrl='xxcb_add.aspx?classname=玉米&classid=0302'?? Target='main1'/〉
〈/treenode〉
〈/TREENODES〉

&n bsp;现在的问题变成了如何将数据表根据“类别号”修改menuone.txt文件。将该过程放在对数据表修改后进行。下面是根据表的内容生成menuone.txt的源代码:
Imports System.IO
Dim txtwriter As StreamWriter
txtwriter = File.CreateText(Server.MapPath("menuone.txt"))
txtwriter.WriteLine("

  1<treenodes>") 
  2
  3  
  4Dim objConn As OleDbConnection   
  5Dim objCmd As OleDbCommand   
  6Dim objRead As OleDbDataReader   
  7Dim strSQL, strDSN As String   
  8Dim strid, strname, strid1, strname1 As String   
  9Dim strand As String   
 10strand = "&amp;" 
 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='adminclass_add.aspx?classname=" &amp; strname &amp; "" &amp; strand &amp; "classid=" &amp; strid &amp; "' target="main2" text='" &amp; strname &amp; "'>")   
 39Case Is = 0   
 40txtwriter.WriteLine("<treenode navigateurl='adminclass_add.aspx?classname=" &amp; strname &amp; "" &amp; strand &amp; "classid=" &amp; strid &amp; "' target="main2" text='" &amp; strname &amp; "'></treenode>")   
 41Case Is &lt; 0   
 42txtwriter.WriteLine("<treenode navigateurl='adminclass_add.aspx?classname=" &amp; strname &amp; "" &amp; strand &amp; "classid=" &amp; strid &amp; "' target="main2" 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='adminclass_add.aspx?classname=" &amp; strname &amp; "" &amp; strand &amp; "classid=" &amp; strid &amp; "' target="main2" 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='adminclass_add.aspx?classname=" &amp; strname &amp; "" &amp; strand &amp; "classid=" &amp; strid &amp; "' target="main2" 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='adminclass_add.aspx?classname=" &amp; strname &amp; "" &amp; strand &amp; "classid=" &amp; strid &amp; "' target="main2" 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()
End Sub
Sub creatmenuone(ByVal strpath As String)
Dim txtwriter As StreamWriter
txtwriter = File.CreateText(strpath + ("\..\menuone.txt"))
txtwriter.WriteLine("

  1<treenodes>") 
  2
  3  
  4Dim objConn As OleDbConnection   
  5Dim objCmd As OleDbCommand   
  6Dim objRead As OleDbDataReader   
  7Dim strSQL, strDSN As String   
  8Dim strid, strname, strid1, strname1 As String   
  9Dim strand As String   
 10strand = "&amp;" 
 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就按要求生成了菜单源文件。
如有更好的办法,请与我联系谢谢。QQ:149592886

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