Carregar menu dinamicamente

.NET

27/01/2012

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

Curtidas 0

Respostas

Thomás Moreira

Thomás Moreira

27/01/2012

Galera!

Alguem ai pra ajudar??? Por favor!

Valeu!
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

27/01/2012

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).
GOSTEI 0
Thomás Moreira

Thomás Moreira

27/01/2012

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.
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

27/01/2012

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

Leonardo Wintrich

27/01/2012

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
GOSTEI 0
Leonardo Wintrich

Leonardo Wintrich

27/01/2012

O email é:
Leonardowintrich@gmail.com
GOSTEI 0
Thomás Moreira

Thomás Moreira

27/01/2012

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!
GOSTEI 0
Thomás Moreira

Thomás Moreira

27/01/2012

Boa tarde Leonardo! Blz?

Demorei um pouco pra responder né?

Consegui fazer a parada! Aparentemente tá tudo OK.

Valeu pela força!

Abraço!
GOSTEI 0
POSTAR