ASP.NET 2.0的导航控件treeview和menu的实例
点击次数:31 次 发布日期:2008-11-21 22:20:48 作者:源代码网
|
源代码网推荐源代码网整理以下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事件绑定,那么用户受不了这样的体验!
源代码网整理以下实现的效果如下:

源代码网整理以下具体实现代码如下:
源代码网整理以下
以下为引用的内容:
源代码网整理以下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 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 " 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,筛选出某节点的下级节点,进行添加。
源代码网整理以下以上代码,没有优化,也不一定是最好的,希望抛砖引玉! 源代码网供稿. |