ASP.NET 2.0的導航控件treeview和menu的實例_.Net教程

      編輯Tag賺U幣
      教程Tag:暫無Tag,歡迎添加,賺取U幣!

      推薦:七招制勝ASP.NET應用程序開發
      隨著微軟.NET的流行,ASP.NET越來越為廣大開發人員所接受。作為ASP.NET的開發人員,我們不僅需要掌握其基本的原理,更要多多實踐,從實踐中獲取真正的開發本領。在我們的實際開發中,往往基本的

      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,篩選出某節點的下級節點,進行添加。

      以上代碼,沒有優化,也不一定是最好的,希望拋磚引玉!

      分享:投票結果的圖片進度條顯示
      一個投票功能模塊少不了查看投票結果,用進度條顯示各個投票結果可以起到一目了然的效果。以下是我的方法,請大家不吝賜教: 1、做一張圖片用于做進度條,只需要很小的一個圖片就可以了,如高2

      來源:模板無憂//所屬分類:.Net教程/更新時間:2008-08-22
      相關.Net教程