找回密码
 注册
搜索
热搜: 回贴

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

2009-12-13 13:04| 发布者: admin| 查看: 35| 评论: 0|原作者: 潇潇雨

◆前日,根据客户需要,要根据如下的表动态生......


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

  我们平时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〉


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

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

  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 = "&"



  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 > 0
  txtwriter.WriteLine("")
  Case Is = 0
  txtwriter.WriteLine("")
  Case Is < 0
  txtwriter.WriteLine("")
  'txtwriter.WriteLine("
")
  m = k
  While m < 0
  txtwriter.WriteLine("
")
  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 > 0
  txtwriter.WriteLine("")
  'txtwriter.WriteLine("
")
  m = Len(strid) / 2
  While m > 1
  txtwriter.WriteLine("
")
  m = m - 1
  End While
  Case Is = 0
  txtwriter.WriteLine("")
  'txtwriter.WriteLine("
")
  m = Len(strid) / 2
  While m > 1
  txtwriter.WriteLine("")
  m = m - 1
  End While
  Case Is <= 0
  txtwriter.WriteLine("")
  'txtwriter.WriteLine("
")
  m = Len(strid) / 2
  While m > 1
  txtwriter.WriteLine("")
  m = m - 1
  End While
  End Select
  txtwriter.WriteLine("
")
  txtwriter.Close()



  这样menuone.txt就按要求生成了菜单源文件。
  如有更好的办法,请与我联系谢谢。QQ:149592886



最新评论

QQ|小黑屋|最新主题|手机版|微赢网络技术论坛 ( 苏ICP备08020429号 )

GMT+8, 2024-9-30 09:37 , Processed in 0.127879 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

返回顶部