Carregar menu dinamicamente

27/01/2012

0

Bom dia a todos!

Estou precisando com urgencia desenvolver uma forma de carregar os itens de um aspnet menu dinamicamente com dados vindos do banco de dados, conforme perfil do usuário. Pesquisando na net, encontrei os seguintes artigos do Maurício Junior:


http://www.ecode10.com/artigo/944/Artigo-Convertido-Temporariamente.aspx

http://www.ecode10.com/artigo/947/Artigo-Convertido-Temporariamente.aspx

http://www.ecode10.com/artigo/948/Artigo-Convertido-Temporariamente.aspx


Porem, mesmo tentando seguir o artigo, não consegui sucesso. Senti falta de mais clareza nas informações e na explicação de certas etapas do processo.
Alguem conhece esses artigos eu ja conseguiu fazer algo desse tipo?

Se alguem puder me ajudar a desenvolver essa funcionalidade, agradeço muito!

Abraços!
Thomás Moreira

Thomás Moreira

Responder

Posts

30/01/2012

Thomás Moreira

Galera!

Alguem ai pra ajudar??? Por favor!

Valeu!
Responder

30/01/2012

Joel Rodrigues

Não sei em que parte está sua dificuldade, mas em geral, o esquema é o seguinte:

        foreach (DataRow r in tab.Rows)
        {
            MenuItem item = new MenuItem();
            item.Text = r[TEXTO].ToString();
            item.NavigateUrl = r[URL].ToString();
            NavigationMenu.Items.Add(item);
        }


Para cada linha na tabela, supondo a existência das colunas TEXTO e URL, criamos um MenuItem e adicionamos ao menu (NavigationMenu).
Responder

30/01/2012

Thomás Moreira

A dificuldade está mais em manter os dados vindos do banco (SQL), contendo todo perfil de acesso do usuario, na sessão, para que fique mais facil acessar. Isso seria usado numa master page.
Responder

31/01/2012

Joel Rodrigues

Mostre aí estrutura das tabelas que registram o perfil do usuário e de que forma você precisa montar esse menu.
Responder

31/01/2012

Leonardo Wintrich

Primeiro criei uma estrutura de dados onde eu posso armazenar uma lista com os dados de forma estruturada(pai/filho)
public class MenuDinamico
    {
        public int itemPai { get; set; }
        public int itemId { get; set; }
        public string nmItem { get; set; }
        public string pagItem { get; set; }
        public MenuDinamico()
        {        }
    }


Depois montei uma rotina que preenche essa estrutura e armazena numa session. Provavelmente vc vai ter uma rotina dessa retornando os dados do banco de dados

private void PreencheDadosMenu()
        {
            var vLista = new List<MenuDinamico>();
            MenuDinamico vMenu = new MenuDinamico();
            vMenu.itemPai = 0;
            vMenu.itemId = 1;
            vMenu.nmItem = Produtos;
            vMenu.pagItem = ~/Produtos.aspx;
            vLista.Add(vMenu);
 
            vMenu = new MenuDinamico();
            vMenu.itemPai = 0;
            vMenu.itemId = 2;
            vMenu.nmItem = Clientes;
            vMenu.pagItem = ~/Clientes.aspx;
            vLista.Add(vMenu);
 
            vMenu = new MenuDinamico();
            vMenu.itemPai = 1;
            vMenu.itemId = 1;
            vMenu.nmItem = Produto 1;
            vMenu.pagItem = ~/Produtos1.aspx;
            vLista.Add(vMenu);
 
            vMenu = new MenuDinamico();
            vMenu.itemPai = 1;
            vMenu.itemId = 2;
            vMenu.nmItem = Produto 2;
            vMenu.pagItem = ~/Produtos2.aspx;
            vLista.Add(vMenu);
 
            vMenu = new MenuDinamico();
            vMenu.itemPai = 2;
            vMenu.itemId = 1;
            vMenu.nmItem = Clientes 1;
            vMenu.pagItem = ~/Clientes1.aspx;
            vLista.Add(vMenu);
 
            Session[Menu] = vLista;
        }


E por fim uma rotina que monta o menu de acordo com o que vem da sessão
private void MontaMenu()
        {
            var vListaMenu = (List<MenuDinamico>)Session[Menu];
 
            var vListaitem0 = from p in vListaMenu where p.itemPai == 0 select p;
            foreach (var item in vListaitem0)
            {
                //para cada item zero, adiciona item zero 
                MenuItem itemMenu = new MenuItem();
                itemMenu.Text = item.nmItem;
                itemMenu.NavigateUrl = item.pagItem;
                Menu1.Items.Add(itemMenu);
 
                //varre lista procurando filhos
                var vListaFilhos = from p in vListaMenu where p.itemPai == item.itemId select p;
                foreach (var itemFilho in vListaFilhos)
                {
                    //para cada item zero, adiciona item zero 
                    MenuItem itemMenuFilho = new MenuItem();
                    itemMenuFilho.Text = itemFilho.nmItem;
                    itemMenuFilho.NavigateUrl = itemFilho.pagItem;
                    itemMenu.ChildItems.Add(itemMenuFilho);
                }
            }
        }


Segue um print com esses métodos na masterpage

E por fim um print do resultado


Qualque duvida me mande um email que te mando o projeto todo.

Abraços
Responder

31/01/2012

Leonardo Wintrich

O email é:
Leonardowintrich@gmail.com
Responder

31/01/2012

Thomás Moreira

Bom dia Leonardo, blz?

Valeu pela atenção!

Vou fazer um teste ainda hoje com os codigos que você passou e amanha te retorno ok?

Muito obrigado!

Abraço!
Responder

14/02/2012

Thomás Moreira

Boa tarde Leonardo! Blz?

Demorei um pouco pra responder né?

Consegui fazer a parada! Aparentemente tá tudo OK.

Valeu pela força!

Abraço!
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar