none
Menu Dinamico com 2 niveis de SubMenu RRS feed

  • Pergunta

  • Estou desenvolvendo um menu dinâmico utilizando o controle menu do asp.net 2.0, porém não estou conseguindo gerar mais de um nivel de menu, ou seja:

    > Menu
                > Nivel 1 
                               > Nivel 2

    Segue abaixo o codigo que estou usando:

    Public Sub PopulateMenu()

    Dim url As String = String.Empty

    Dim titulo As String = String.Empty

    Dim ds As Data.DataSet

    ds = Me.GetDataSet("Select * From Menu where idPai = 0")

    For Each row As Data.DataRow In ds.Tables(0).Rows

    Dim masteritem As New MenuItem(row("Nome").ToString)

    Dim dsFilho As Data.DataSet

    Dim dsFilho2 As Data.DataSet

    dsFilho = Me.GetDataSet("Select * From Menu where idPai =" & row("ID"))

    Menu1.Items.Add(masteritem)

    If dsFilho.Tables(0).Rows.Count <> 0 Then

    For Each rowChild As Data.DataRow In dsFilho.Tables(0).Rows

    Dim childItem As New MenuItem(rowChild("Nome").ToString)

    childItem.NavigateUrl = rowChild("Nome").ToString & ".aspx"

    dsFilho2 = Me.GetDataSet("Select * From Menu where idPai =" & rowChild("ID"))

    If dsFilho2.Tables(0).Rows.Count <> 0 Then

    For Each rowChild2 As Data.DataRow In dsFilho2.Tables(0).Rows
        << AQUI FICARIA O CODIGO >>
    Next

    End If

    masteritem.ChildItems.Add(childItem)

    Next

    End If

    Next

    End Sub

    quarta-feira, 31 de janeiro de 2007 18:27

Respostas

  • Thiago,


    Eu sugiro vc usar uma funcao recursiva pq se vc tiver um menu com 5 niveis imagina a bagunça q vai ficar o seu codigo ?


    Entao tente fazer algo assim:


    private void CriaMenu(int idPai, MenuItem Item){
        //aki vc pega o idPai e executa sua select caso tenha resultado
        //vc sabe que o Item vai ter filhos
        //caso contrario nao faz nada

       //vamos imaginar q carregou informacoes do banco com o idPai
        
       MenuItem ItemFilho = null;
       if(Ds.Tables[0].Rows.Count > 0){
       foreach(DataRow dr in Ds.Tables[0].Rows){
          ItemFilho = new MenuItem();
          //aki vc configura o item filho
          Item.ChildItems.Add(ItemFilho);

         if( Convert.ToInt32(dr["IdPai"],ToString())  > 0)
             CriaMenu(Convert.ToInt32(dr["IdPai"],ToString()), ItemFilho);
       }
    }else{
         MenuItem Item = new MenuItem();
         Menu1.Items.Add(Item);
    }
    }

    Esse código deve te ajudar um pouco pelo menos pra vc ter noção de como tem q ser feito eu nunca usei esse controle Menu entao nao ligue se tiver alguma coisa errada.


    Espero ter ajudado.



    []'s

    quarta-feira, 31 de janeiro de 2007 19:44