热烈祝贺台州朗动科技的站长论坛隆重上线!(2012-05-28)    热烈庆祝伟大的祖国60周年生日 点击进来我们一起为她祝福吧(2009-09-26)    站长论坛禁止发布广告,一经发现立即删除。谢谢各位合作!.(2009-08-08)    热烈祝贺台州网址导航全面升级,全新版本上线!希望各位一如既往地支持台州网址导航的发展.(2009-03-28)    台州站长论坛恭祝各位新年快乐,牛年行大运!(2009-01-24)    台州Link正式更名为台州网址导航,专业做以台州网址为主的网址导航!(2008-05-23)    热烈祝贺台州Link资讯改名为中国站长资讯!希望在以后日子里得到大家的大力支持和帮助!(2008-04-10)    热烈祝贺台州Link论坛改名为台州站长论坛!希望大家继续支持和鼓励!(2008-04-10)    台州站长论坛原[社会琐碎]版块更名为[生活百科]版块!(2007-09-05)    特此通知:新台州站长论坛的数据信息全部升级成功!">特此通知:新台州站长论坛的数据信息全部升级成功!(2007-09-01)    台州站长论坛对未通过验证的会员进行合理的清除,请您谅解(2007-08-30)    台州网址导航|上网导航诚邀世界各地的网站友情链接和友谊联盟,共同引领网站导航、前进!(2007-08-30)    禁止发广告之类的帖,已发现立即删除!(2007-08-30)    希望各位上传与下载有用资源和最新信息(2007-08-30)    热烈祝贺台州站长论坛全面升级成功,全新上线!(2007-08-30)    
便民网址导航,轻松网上冲浪。
台州维博网络专业开发网站门户平台系统
您当前的位置: 首页 » ASP/ASP.NET编程 » ASP.NET 2.0的导航控件treeview和menu的实例

ASP.NET 2.0的导航控件treeview和menu的实例

论坛链接
  • ASP.NET 2.0的导航控件treeview和menu的实例
  • 发布时间:2007-12-03 17:40:25    浏览数:6478    发布者:superadmin    设置字体【   
ASPnet20 为用户提供了treeview和menu导航控件,使用十分方便,极大提高了用户开发项目的速度和效率。

尤其是treeview和menu绑定websitemap之类的XML文件,形成层次数据非常便捷。

但我在项目开发过程中,很多地方是需要绑定关系数据库,毕竟关系数据库是最常用、操作最方便的存储形式。

对于treebview与关系数据库绑定可以动态绑定,也就是在page_load事件中首先添加第一级节点,然后在treeview的SelectedNodeChanged事件中进行判断添加下一级节点。因为使用AJAX技术后,把treeview控件放在UpdatePanel控件之内,用户的页面体验效果相当不错。

然而对于menu控件,这样就有麻烦了,因为我发现menu在UpdatePanel控件中有问题:就是移动鼠标后原来的菜单项会遗留在屏幕上,直到单击新的菜单项(不知道是bug,还是我哪里出现问题)。也许有人觉得menu不要动态绑定,直接绑定XML做成静态的多好!但在做项目时需要不同的用户登陆后出现的菜单效果不同,而在websitemap中roles角色控制又不是十分便利,所以使用关系数据库直接对menu菜单项的enabled进行赋值,控制更加灵活。


因为有bug,只能把menu控件放在UpdatePanel控件之外,对menu的绑定就要在page_load事件中一次性绑定,如果使用menu控件的MenuItemClick事件绑定,那么用户受不了这样的体验!

实现的效果如下:


具体实现代码如下:
default.aspx

1<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default4.aspx.vb" Inherits="Default4" %>
2<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3<html xmlns="http://www.w3.org/1999/xhtml" >
4<head runat="server">
5 <title>导航控件测试</title>
6</head>
7<body>
8 <form id="form1" runat="server">
9
10
11 <asp:Menu ID="Menu1"
12 runat="server"
13 disappearafter="2000"
14 staticsubmenuindent="10px"

Chinaz@com


15 orientation="Horizontal"
16 StaticEnableDefaultPopOutImage="False"
17 BackColor="#E3EAEB"
18 DynamicHorizontalOffset="2"
19 Font-Names="宋体"
20 Font-Size="14px"
21 ForeColor="#666666" >
22 <StaticMenuItemStyle HorizontalPadding="5px" VerticalPadding="2px" />
23 <DynamicHoverStyle BackColor="#666666" ForeColor="White" />


24 <DynamicMenuStyle BackColor="#E3EAEB" />
25 <StaticSelectedStyle BackColor="#E3EAEB" />
26 <DynamicSelectedStyle BackColor="#E3EAEB" />
27 <DynamicMenuItemStyle HorizontalPadding="5px" VerticalPadding="2px" />
28 <StaticHoverStyle BackColor="#666666" ForeColor="White" />
29 </asp:Menu>
30
31 </form>
32</body>
33</html>
default.aspx.vb


1Imports System
2Imports System.Data
3Imports System.Data.SqlClient
4Partial Class Default4Class Default4
5 Inherits System.Web.UI.Page
6 Public strConn, strSQL As String
7 Dim myConn As SqlConnection
8 Dim mydv As DataView
9 Dim i As Integer
10 Dim menunode As MenuItem
11 Protected Sub Page_Load()Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
12 strConn = System.Configuration.ConfigurationManager.AppSettings("connstring")
13 myConn = New SqlConnection(strConn)
14
15 If Not Page.IsPostBack Then
16 strSQL = "select * from menu " Chinaz_com
17 mydv = GetDataView(strSQL, "menu")
18 mydv.RowFilter = "parentid=0"
19 For i = 0 To mydv.Count - 1
20 menunode = New MenuItem
21 menunode.Text = mydv.Item(i).Item("text")
22 menunode.Value = mydv.Item(i).Item("id")
23 menunode.Enabled = mydv.Item(i).Item("Enabled")
24 menunode.Target = mydv.Item(i).Item("Target")
25 menunode.NavigateUrl = mydv.Item(i).Item("url")
26 Menu1.Items.Add(menunode)
27 addnode(menunode, menunode.Value)
28 mydv.RowFilter = "parentid=0"
29 Next
30 End If
31 End Sub
32
33 Sub addnode()Sub addnode(ByVal pnode As MenuItem, ByVal pid As Integer)
34 Dim menunode As MenuItem
35 Dim j As Integer
36 mydv.RowFilter = "parentid=" & pid
37 For j = 0 To mydv.Count - 1
38 menunode = New MenuItem
39 menunode.Text = mydv.Item(j).Item("text")
40 menunode.Value = mydv.Item(j).Item("id")
41 menunode.Enabled = mydv.Item(j).Item("Enabled")
42 menunode.Target = mydv.Item(j).Item("Target")
43 menunode.NavigateUrl = mydv.Item(j).Item("url")
44 pnode.ChildItems.Add(menunode)
45 addnode(menunode, menunode.Value)
46 mydv.RowFilter = "parentid=" & pid
47 Next
48
49 End Sub
50
51 Function GetDataView()Function GetDataView(ByVal Sql As String, ByVal strTable As String) As DataView
52 Dim myDataAdapter As SqlDataAdapter
53 Dim myDataSet As DataSet
54 myConn.Open()
55 myDataAdapter = New SqlDataAdapter(Sql, myConn)
56 myConn.Close()
57 myDataSet = New DataSet
58 myDataAdapter.Fill(myDataSet, strTable)
59 GetDataView = New DataView(myDataSet.Tables(strTable))
60 End Function
61
62
63End Class
64

数据库结构如下:


上面实现的关键是:

1、addnode递归过程,实现下级节点的添加;

2、DataView的RowFilter属性,mydv.RowFilter = "parentid=" & pid,筛选出某节点的下级节点,进行添加。


以上代码,没有优化,也不一定是最好的,希望抛砖引玉!
娱乐休闲专区A 影视预告B 音乐咖啡C 英语阶梯D 生活百科
网页编程专区E AMPZF HTMLG CSSH JSI ASPJ PHPK JSPL MySQLM AJAX
Linux技术区 N 系统管理O 服务器架设P 网络/硬件Q 编程序开发R 内核/嵌入
管理中心专区S 发布网址T 版主议事U 事务处理