Asp.net Menu og CollapsiblePanelExtender
Jeg har en side med 2 horisontale menuer.Den nederste har jeg ingen problemer med da den navigerer v.h.a. response.redirect("minside.aspx")
Den øverste vil jeg ikke have til at navigere på samme måde.
Jeg har tilføjet en CollapsiblePanelExtender til det panel som mine menuitems bliver loaded dynamisk ind i. Når brugerne klikker på et menuitem skal panelet folde ned og afhængigt af hvad de har trykket på skal panelet fyldes med data fra SQL databasen. Panelet lukker først igen når brugerne trykker luk knappen.
Mit problem er at jeg kan ikke får menuen til at virke når først jeg har implemeneteret funktionerne fir CPE.
Jeg kan sagtens loade data fra DB ind i panelet, men ikke afhængigt af det valgte menuitem, da den af en eller anden mærkelig grund bliver disabled.
Nogen der kan hjælpe - jeg koder i asp.net og VB.net
ASPX side:
<%@ Control Language="vb" AutoEventWireup="false" CodeBehind="MenuTop.ascx.vb" Inherits="ElvWeb.MenuTop" %>
<%@ Register assembly="AjaxControlToolkit" namespace="AjaxControlToolkit" tagprefix="cc1" %>
<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
<link href="Style.css" rel="stylesheet" type="text/css" />
<asp:Label ID="LblMessage" runat="server" CssClass="ErrorMessage"></asp:Label>
<div ID="Size_TopMenu">
<asp:Panel ID="MenuPanel" runat="server" CssClass="collapsePanelHeader" HorizontalAlign="Right"></asp:Panel>
<cc1:CollapsiblePanelExtender ID="cpe"
runat="server"
TargetControlID="ContentPanel"
ExpandControlID="MenuPanel"
CollapseControlID="BtnClose"
Collapsed="True"
SuppressPostBack="true">
</cc1:CollapsiblePanelExtender>
<asp:Panel ID="ContentPanel" runat="server" CssClass="collapsePanel"></asp:Panel>
</div>
VB side:
Public Partial Class MenuTop
Inherits System.Web.UI.UserControl
Dim MyCommand As New SqlCommand
Dim MyConnection As New SqlConnection
Dim MyDA As New SqlDataAdapter
Dim MyReader As SqlDataReader
Dim MyDS As DataSet
Dim MySQL, MySQL_Main, MySQL_Sub As String
Dim MyTabel As Table
Dim TblRow As TableRow
Dim TblCell As TableCell
Dim MyLabel As Label
Dim MyButton As LinkButton
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim conn As String = System.Configuration.ConfigurationManager.AppSettings("WebConn")
MyConnection = New SqlConnection(conn)
MyConnection.Open()
If Not Page.IsPostBack Then
Call PopulateMenu()
'Call FillInfo()
End If
End Sub
Private Sub PopulateMenu()
Dim ds As DataSet = GetDataSetForMenu()
Dim menu As New Menu()
Dim MainMenuItem As New MenuItem
Dim SubMenuItem As New MenuItem
Dim parentItem As DataRow
Try
MainMenuItem = New MenuItem("|")
menu.Items.Add(MainMenuItem)
For Each parentItem In ds.Tables("MenuMain_Tbl").Rows
MainMenuItem = New MenuItem(CStr(parentItem("MenuText")))
MainMenuItem.NavigateUrl = CStr(parentItem("NavigateUrl"))
menu.Items.Add(MainMenuItem)
Dim childItem As DataRow
For Each childItem In parentItem.GetChildRows("Children")
SubMenuItem = New MenuItem(CStr(childItem("SubMenuText")))
SubMenuItem.NavigateUrl = CStr(childItem("NavigateUrl"))
MainMenuItem.ChildItems.Add(SubMenuItem)
Next childItem
MainMenuItem = New MenuItem("|")
menu.Items.Add(MainMenuItem)
Next parentItem
menu.Orientation = Orientation.Horizontal
'1st level menu styles
menu.StaticPopOutImageUrl = "gfx/nav_arrow_down_White_red.jpg"
menu.StaticMenuItemStyle.CssClass = "MainMenu"
menu.StaticHoverStyle.CssClass = "MainMenuHover"
'2nd level menu styles
menu.DynamicPopOutImageUrl = "gfx/nav_arrow_down_White_red.jpg"
menu.DynamicMenuItemStyle.CssClass = "SubMenu"
menu.DynamicHoverStyle.CssClass = "SubMenuHover"
Catch ex As Exception
LblMessage.Text = ex.ToString
Response.Write(MySQL)
End Try
MenuPanel.Controls.Add(menu)
MenuPanel.DataBind()
End Sub 'PopulateMenu
Private Function GetDataSetForMenu() As DataSet
MySQL_Main = "SELECT * FROM MenuMain_Tbl order by orderby;"
Dim adMainMenu As New SqlDataAdapter(MySQL_Main, MyConnection)
MySQL_Sub = "SELECT * FROM dbo.MenuMainSub_Tbl;"
Dim adSubMenu As New SqlDataAdapter(MySQL_Sub, MyConnection)
Dim ds As New DataSet()
adMainMenu.Fill(ds, "MenuMain_Tbl")
adSubMenu.Fill(ds, "dbo.MenuMainSub_Tbl")
ds.Relations.Add("Children", ds.Tables("MenuMain_Tbl").Columns("MenuID"), ds.Tables("dbo.MenuMainSub_Tbl").Columns("MenuID"))
Return ds
End Function 'GetDataSetForMenu
Public Sub FillInfo()
MyTabel = New Table
MyDS = New DataSet
MyCommand = New SqlCommand
MySQL = "SELECT Staff_Tbl.StaffID, Staff_Tbl.DepartmentID, Staff_Tbl.StaffName, Staff_Tbl.StaffTitle, Staff_Tbl.StaffPhone, Staff_Tbl.StaffEmail, Staff_Tbl.ImageData, Department_Tbl.Department FROM Staff_Tbl INNER JOIN Department_Tbl ON Staff_Tbl.DepartmentID = Department_Tbl.DepartmentID WHERE (Staff_Tbl.DepartmentID = 7)"
MyCommand.CommandText = MySQL
MyCommand.Connection = MyConnection
MyReader = MyCommand.ExecuteReader
While MyReader.Read
Dim myStaffID As String = MyReader("StaffID")
TblRow = New TableRow
TblCell = New TableCell
If IsDBNull(MyReader("ImageData")) Then
TblCell.Text = "<img src='images/NoPicture.jpg' />"
Else
TblCell.Text = "<img alt='Image_" & myStaffID & "' src='Image.aspx?ImgID=" & myStaffID & "&Tbl=Staff_Tbl&ColID=StaffID' />"
End If
TblCell.Attributes.Add("Rowspan", 4)
TblRow.Cells.Add(TblCell)
MyTabel.Rows.Add(TblRow)
TblCell = New TableCell
If Not IsDBNull(MyReader("StaffName")) Then TblCell.Text = "<H3>" + MyReader("StaffName") + "</H3>"
TblCell.Attributes.Add("Colspan", 2)
TblRow.Cells.Add(TblCell)
MyTabel.Rows.Add(TblRow)
TblRow = New TableRow
TblCell = New TableCell
If Not IsDBNull(MyReader("StaffTitle")) Then TblCell.Text = MyReader("StaffTitle")
TblCell.Attributes.Add("Colspan", 2)
TblRow.Cells.Add(TblCell)
MyTabel.Rows.Add(TblRow)
TblRow = New TableRow
TblCell = New TableCell
TblCell.Text = "Phone: "
TblRow.Cells.Add(TblCell)
TblCell = New TableCell
If Not IsDBNull(MyReader("StaffPhone")) Then TblCell.Text = MyReader("StaffPhone")
TblRow.Cells.Add(TblCell)
MyTabel.Rows.Add(TblRow)
TblRow = New TableRow
TblCell = New TableCell
TblCell.Text = "E-mail: "
TblRow.Cells.Add(TblCell)
TblCell = New TableCell
If Not IsDBNull(MyReader("StaffEmail")) Then TblCell.Text = MyReader("StaffEmail")
TblRow.Cells.Add(TblCell)
MyTabel.Rows.Add(TblRow)
TblRow = New TableRow
TblCell = New TableCell
TblCell.Text = "</br>"
TblCell.Attributes.Add("Colspan", 3)
TblRow.Cells.Add(TblCell)
MyTabel.Rows.Add(TblRow)
End While
MyReader.Close()
'MyTabel.Attributes.Add("Border", 1)
ContentPanel.Controls.Add(MyTabel)
Dim MyButton As New LinkButton
MyButton.Text = "Close"
MyButton.ID = "BtnClose"
ContentPanel.Controls.Add(MyButton)
MyConnection.Close()
End Sub
End Class