none
Menu DInamico RRS feed

  • Pregunta

  • Hola a todos estoy metido ene un problema.

    Tengo un control Menu en una MasterPage

    <

     

    asp:Menu ID="menu" runat ="server"

     

    OnMenuItemClick ="menu_MenuItemClick"

     

    StaticMenuItemStyle-CssClass ="MenuUp" >


    y lo estoy llenado asi

    DataTable

     

    dt = executaSP("sp_consulta_items_menu");

     

    MenuItem mItem;

     

    foreach (DataRow dr in dt.Rows)

    {

    mItem =

    new MenuItem(dr.ItemArray[0].ToString(), dr.ItemArray[1].ToString());

    menuPrincipal.Items.Add(mItem);

    }

     

    SI me lo llena el problema es que como pirmer item me pone uno vacio que tiene como referencia:

    y al final otro que esta deshabilitado en medio de ellos me pone los que le carga la dt.

    menu_SkipLink
     Datos
    Contactanos
    Acerca de
    empety


    Esto lo hace incluso sin ponerle ningun estylo

    Alguein sabe que puedo hacer?


    oxtibu-Mexico
    viernes, 29 de mayo de 2009 23:22

Respuestas

  • hola,

    consulta porque accedes a los roy del datatable haciando uso de la propiedad "ItemArray".

    el objeto DataRow, puede acceder a cada columna si le ingresas el nombre de la misma.

    dr["id"].ToString()

    o dr["descripcion"].ToString()



    recuerda que la declaracion del objeto mItem, tambien puede ir dentro del loop foreach:


    foreach (DataRow dr in dt.Rows)
    {

       MenuItem mItem mItem = new MenuItem(dr[0].ToString(), dr[1].ToString());

       menuPrincipal.Items.Add(mItem);

    }



    saludos
    Leandro Tuttini

    Work: Iceberg Solutions
    Blog
    Buenos Aires
    Argentina
    • Marcado como respuesta oxtibu jueves, 25 de junio de 2009 15:58
    sábado, 30 de mayo de 2009 19:27

Todas las respuestas

  • hola,

    consulta porque accedes a los roy del datatable haciando uso de la propiedad "ItemArray".

    el objeto DataRow, puede acceder a cada columna si le ingresas el nombre de la misma.

    dr["id"].ToString()

    o dr["descripcion"].ToString()



    recuerda que la declaracion del objeto mItem, tambien puede ir dentro del loop foreach:


    foreach (DataRow dr in dt.Rows)
    {

       MenuItem mItem mItem = new MenuItem(dr[0].ToString(), dr[1].ToString());

       menuPrincipal.Items.Add(mItem);

    }



    saludos
    Leandro Tuttini

    Work: Iceberg Solutions
    Blog
    Buenos Aires
    Argentina
    • Marcado como respuesta oxtibu jueves, 25 de junio de 2009 15:58
    sábado, 30 de mayo de 2009 19:27
  • Hola oxtibu

    (Agregando a lo que te comenta Leandro...)

    Tenia un codigo de ejemplo asi que te lo copio para que te sirva de "ejemplo a seguir" o para ver como seria...


    Supongamos que tenemos una clase   
    	Public Class Seccion
    	    Public Id As Integer
    	    Public Nombre As String
    	    Public PadreId As Integer
    
    	    Public Sub New(ByVal Id As Integer, ByVal Nombre As String, ByVal PadreId As Integer)
    	        Me.Id = Id
    	        Me.Nombre = Nombre
    	        Me.PadreId = PadreId
    	    End Sub
    	End Class

     
    Luego en nuestra pagina generamos
    (Imports System.Collections)
    ''' <summary>
        ''' Generar Secciones.
        ''' Ejemplo:
        '''      Item 1
        '''         Item 1.1
        '''         Item 1.2
        '''         Item 1.3
        ''' </summary>
        ''' <remarks></remarks>
        Private Sub SeccionesGenerar()
            For i As Integer = 1 To 3
                Dim s1 As New Seccion(i, "Item " & i.ToString, i)
                _secciones.Add(s1)
    
                For j As Integer = 1 To 3
                    Dim id As Integer = 1
                    Dim cadena As String = i.ToString & "." & j.ToString
                    Dim s2 As New Seccion(i + j, "Item " & cadena, i)
                    _secciones.Add(s2)
                Next
            Next
        End Sub
    


     
    Los metodos son algo asi
     
     Private Sub MenuArmar()
    
            Dim idPadreAnterior As Integer = 0
            Dim padreItem As MenuItem = Nothing
            Dim seccionItem As MenuItem
    
            For Each seccion As Seccion In _secciones
                If idPadreAnterior <> seccion.PadreId Then
                    padreItem = MenuItemAgregar(seccion, enuTipoItemMenu.Grupo, padreItem)
                    idPadreAnterior = seccion.PadreId
                Else
                    seccionItem = MenuItemAgregar(seccion, enuTipoItemMenu.Seccion, padreItem)
                End If
    
            Next
    
        End Sub

    Private Function MenuItemAgregar(ByVal seccion As Seccion, ByVal tipo As enuTipoItemMenu, ByVal padreItem As MenuItem) As MenuItem
            Dim Item As New MenuItem
            Dim pagina As String = Request.Url.AbsolutePath
            Select Case tipo
                Case enuTipoItemMenu.Grupo
                    Item.Text = seccion.Nombre
                    Item.NavigateUrl = String.Format("{0}?secciongrupoid={1}", pagina, seccion.Id)
                    Item.ToolTip = String.Empty
                    mnuMenuPrincipal.Items.Add(Item)
    
                Case enuTipoItemMenu.Seccion
                    Item.Text = seccion.Nombre
                    Item.NavigateUrl = String.Format("{0}?seccionid={1}", pagina, seccion.Id)
                    Item.ToolTip = String.Empty
                    padreItem.ChildItems.AddAt(0, Item)
    
            End Select
    
            Return (Item)
    
        End Function
    


     Y en el load de la pagina simplemente
         SeccionesGenerar()
         MenuArmar()
     


    Enlaces:
    ------------------------------

    MenuItem (Constructor) 
    Inicializa una nueva instancia de la clase MenuItem utilizando los datos de texto de menú, valor, dirección URL de una imagen, dirección URL de desplazamiento y destino especificados. 

    MenuItem.ChildItems (Propiedad)
    Obtiene un objeto MenuItemCollection que contiene los elementos de submenú del elemento de menú actual. 


    Populating Menu Control in ASP.NET 2.0 - using different data sources
    - Populating the Menu using SiteMapDataSource
    - Populating the Menu using the Database
    - Populating the Menu Control Using an XML File



    Espero que te sirva de ayuda o guia


    Jose. A Fernandez | blog: http://geeks.ms/blogs/fernandezja
    lunes, 1 de junio de 2009 12:10
  • SI lo se de hecho las otras partes de l codigo ya lo tengo sasi
    pero he estado provando para lograr queitar esos dos items que me pone el control Menu por default.
    oxtibu-Mexico
    lunes, 1 de junio de 2009 18:13
  • Hola mira lo tengo de manera siilar
    si me lopone
    el problema es que me antepone
    un item vacio, luego los items que le paso , y me termina con otro item vacio,

    Elprimer ahytem vacio , solo ,me refresca la pagina, el segun item esta deshabilitado.


    oxtibu-Mexico
    viernes, 12 de junio de 2009 0:52
  • Hola todos despues de buscar resuto ser la class css que le estab poniendo.

    Saludos a todos.
    oxtibu-Mexico
    jueves, 25 de junio de 2009 15:58