当前位置:网络资源中心文章中心网络编程ASP.NET教程 → 文章内容

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

减小字体 增大字体 作者:小蔡  来源:0432web.com  发布时间:2008-5-16 9:46:44

作者xiangwa 出处CSDN

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

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

  %26lt;iewc:TreeView runat="server" ID="Treeview1" NAME="Treeview1"%26gt;
  %26lt;iewc:TreeNode id="Treenode1" runat="server" TreeNodeSrc="menuone.txt" Expanded="True" Text="信息类别列表"%26gt;%26lt;/iewc:TreeNode%26gt;
  %26lt;/iewc:TreeView%26gt;

  其中menuone.txt的内容如下

  %26lt;TREENODES%26gt;
  %26lt;treenode text='蔬菜' NavigateUrl='xxcb_add.aspx?classname=蔬菜%26amp;classid=01'? Target='main1'%26gt;
  %26lt;treenode text='白菜' NavigateUrl='xxcb_add.aspx?classname=白菜%26amp;classid=0101'?? Target='main1'/%26gt;
  %26lt;treenode text='萝卜' NavigateUrl='xxcb_add.aspx?classname=萝卜%26amp;classid=0102'?? Target='main1'/%26gt;
  %26lt;treenode text='黄花菜' NavigateUrl='xxcb_add.aspx?classname=黄花菜%26amp;classid=0103'?? Target='main1'/%26gt;
  %26lt;/treenode%26gt;
  %26lt;treenode text='水果' NavigateUrl='xxcb_add.aspx?classname=水果%26amp;classid=02'? Target='main1'%26gt;
  %26lt;treenode text='苹果' NavigateUrl='xxcb_add.aspx?classname=苹果%26amp;classid=0201'? Target='main1'%26gt;
  %26lt;treenode text='红富士' NavigateUrl='xxcb_add.aspx?classname=红富士%26amp;classid=020101'?? Target='main1'/%26gt;
  %26lt;treenode text='其它苹果' NavigateUrl='xxcb_add.aspx?classname=其它苹果%26amp;classid=020102'?? Target='main1'/%26gt;

  %26lt;/treenode%26gt;
  %26lt;treenode text='桃子' NavigateUrl='xxcb_add.aspx?classname=桃子%26amp;classid=0202'?? Target='main1'/%26gt;
  %26lt;treenode text='荔枝' NavigateUrl='xxcb_add.aspx?classname=荔枝%26amp;classid=0203'?? Target='main1'/%26gt;
  %26lt;/treenode%26gt;
  %26lt;treenode text='粮食' NavigateUrl='xxcb_add.aspx?classname=粮食%26amp;classid=03'? Target='main1'%26gt;
  %26lt;treenode text='大米' NavigateUrl='xxcb_add.aspx?classname=大米%26amp;classid=0301'?? Target='main1'/%26gt;
  %26lt;treenode text='玉米' NavigateUrl='xxcb_add.aspx?classname=玉米%26amp;classid=0302'?? Target='main1'/%26gt;
  %26lt;/treenode%26gt;
  %26lt;/TREENODES%26gt;

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


  Imports System.IO
  Dim txtwriter As StreamWriter
  txtwriter = File.CreateText(Server.MapPathstrpath ("\menuone.txt"))
  txtwriter.WriteLine("%26lt;TREENODES%26gt;")

  Dim objConn As OleDbConnection
  Dim objCmd As OleDbCommand
  Dim objRead As OleDbDataReader
  Dim strSQL, strDSN As String
  Dim strid, strname, strid1, strname1 As String
  Dim strand As String
  strand = "%26amp;amp;"


  Dim i, j, k, m As Integer
  i = 0
  j = 0
  k = 0
  m = 0

  strSQL = "select * from class order by classid "

  objConn = New OleDbConnection(ConfigurationSettings.AppSettings("connString"))
  objCmd = New OleDbCommand(strSQL, objConn)
  objCmd.Connection.Open()
  objRead = objCmd.ExecuteReader()

  While objRead.Read()

  If j = 0 Then
  j = Len(Trim(objRead.Item("classid")))
  Else
  strid = strid1
  strname = strname1
  i = Len(Trim(objRead.Item("classid")))

  k = i - j

  Select Case k
  Case Is %26gt; 0
  txtwriter.WriteLine("%26lt;treenode text='" %26amp; strname %26amp; "' NavigateUrl='xxcb_add.aspx?classname=" %26amp; strname %26amp; "" %26amp; strand %26amp; "classid=" %26amp; strid %26amp; "' Target='main1'%26gt;")
  Case Is = 0
  txtwriter.WriteLine("%26lt;treenode text='" %26amp; strname %26amp; "' NavigateUrl='xxcb_add.aspx?classname=" %26amp; strname %26amp; "" %26amp; strand %26amp; "classid=" %26amp; strid %26amp; "' Target='main1'/%26gt;")
  Case Is %26lt; 0
  txtwriter.WriteLine("%26lt;treenode text='" %26amp; strname %26amp; "' NavigateUrl='xxcb_add.aspx?classname=" %26amp; strname %26amp; "" %26amp; strand %26amp; "classid=" %26amp; strid %26amp; "' Target='main1'/%26gt;")
  'txtwriter.WriteLine("%26lt;/treenode%26gt;")

  m = k
  While m %26lt; 0
  txtwriter.WriteLine("%26lt;/treenode%26gt;")
  m = m + 2
  End While

  End Select

  j = Len(Trim(objRead.Item("classid")))

  End If

  strid1 = Trim(objRead.Item("classid"))
  strname1 = Trim(objRead.Item("classname"))

  End While

  'strid = strid1
  'strname = strname1
  i = Len(strid)
  k = j - i
  strid = strid1
  strname = strname1
  Select Case k
  Case Is %26gt; 0
  txtwriter.WriteLine("%26lt;treenode text='" %26amp; strname %26amp; "' NavigateUrl='xxcb_add.aspx?classname=" %26amp; strname %26amp; "" %26amp; strand %26amp; "classid=" %26amp; strid %26amp; "' Target='main1'/%26gt;")
  'txtwriter.WriteLine("%26lt;/treenode%26gt;")

  m = Len(strid) / 2

  While m %26gt; 1
  txtwriter.WriteLine("%26lt;/treenode%26gt;")
  m = m - 1
  End While
  Case Is = 0
  txtwriter.WriteLine("%26lt;treenode text='" %26amp; strname %26amp; "' NavigateUrl='xxcb_add.aspx?classname=" %26amp; strname %26amp; "" %26amp; strand %26amp; "classid=" %26amp; strid %26amp; "' Target='main1'/%26gt;")
  'txtwriter.WriteLine("%26lt;/treenode%26gt;")
  m = Len(strid) / 2

  While m %26gt; 1
  txtwriter.WriteLine("%26lt;/treenode%26gt;")
  m = m - 1
  End While
  Case Is %26lt;= 0
  txtwriter.WriteLine("%26lt;treenode text='" %26amp; strname %26amp; "' NavigateUrl='xxcb_add.aspx?classname=" %26amp; strname %26amp; "" %26amp; strand %26amp; "classid=" %26amp; strid %26amp; "' Target='main1'/%26gt;")
  'txtwriter.WriteLine("%26lt;/treenode%26gt;")

  m = Len(strid) / 2

  While m %26gt; 1
  txtwriter.WriteLine("%26lt;/treenode%26gt;")
  m = m - 1
  End While

  End Select
  txtwriter.WriteLine("%26lt;/TREENODES%26gt;")
  txtwriter.Close()

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