Carregar menu dinamicamente
27/01/2012
0
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
Posts
30/01/2012
Joel Rodrigues
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).
30/01/2012
Thomás Moreira
31/01/2012
Joel Rodrigues
31/01/2012
Leonardo Wintrich
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
31/01/2012
Thomás Moreira
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!
14/02/2012
Thomás Moreira
Demorei um pouco pra responder né?
Consegui fazer a parada! Aparentemente tá tudo OK.
Valeu pela força!
Abraço!
Clique aqui para fazer login e interagir na Comunidade :)