日期:2011-02-02  浏览次数:20701 次

ASP.net2.0 为用户提供了treeview和menu导航控件,使用十分方便,极大提高了用户开发项目的速度和效率。

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

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

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

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

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

实现的效果如下:

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

具体实现代码如下:

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