Desenvolvimento - ASP. NET
Usando ASP:MENU
Olá pessoal, hoje gostaria de falar como é fácil criar um menu dinâmico de acordo com o banco de dados. Em artigos antigos, eu mostrei como utilizando menu dinâmico com XML e agora gostaria de mostrar algumas manhas para montar o menu com o componente .NET dinamicamente.
por Mauricio JuniorOlá pessoal, hoje gostaria de falar como é fácil criar um menu dinâmico de acordo com o banco de dados. Em artigos antigos, eu mostrei como utilizando menu dinâmico com XML e agora gostaria de mostrar algumas manhas para montar o menu com o componente .NET dinamicamente.
Referência:
Visual Studio .NET 2008 ou 2010
Linguagem C#.NET
Banco de dados SQL Server
Não tem segredo, mas peço que acompanhe o passo a passo do artigo para não ter erro. Lembrando que cada exemplo abaixo foi feito de forma real e com códigos reais.
O primeiro passo é projetar o banco de dados de maneira que fique dinâmico e limpo, com links e nomes dos menus que vão aparecer na tela. No caso de permissão de usuário ou não, crie um campo específico que defina essa característica ou então crie outra tabela de junção do usuário com o menu. Assim basta passar apenas o usuário logado e pronto.
Select no banco de dados
public DataTable ListarMenus(int p_UsuarioId) { StringBuilder _SQL = new StringBuilder();
_SQL.Append(" SELECT m.menDescricao, m.menIndex, m.menLink FROM dbImagonSign..Menu as m ORDER BY m.menIndex");
DataTable DT = objConexaoDbImagonSign.retornarTabela(_SQL.ToString(),"Menu");
return DT; }
|
Code 1.
O mais importante desse select é trazer os campos necessários para montar o menu com descrição, index e link. O campo index provê e identifica qual é o menu principal e quais são os menus abaixo dele.
Arquivo .ASPX ou MasterPage
Passando agora para o arquivo .aspx ou .master (o menu pode ser carregado dentro de algum desses tipos de arquivos e outros mais), o código colocado dentro foi: (Code 2)
<asp:Menu ID="menuSistema" runat="server" BackColor="#E2E8E8" DynamicHorizontalOffset="2" Font-Names="Verdana" Font-Size="Small" ForeColor="#284E98" StaticSubMenuIndent="10px" Font-Bold="True" Orientation="Horizontal"> <StaticSelectedStyle BackColor="#E2E8E8" /> <StaticHoverStyle BackColor="#E2E8E8" ForeColor="white" /> <StaticMenuItemStyle HorizontalPadding="5px" VerticalPadding="2px" /> <DynamicHoverStyle BackColor="#CACFD5" ForeColor="White" /> <DynamicMenuStyle BackColor="#E2E8E8" /> <DynamicSelectedStyle BackColor="#CACFD5" /> <DynamicMenuItemStyle HorizontalPadding="5px" VerticalPadding="2px" /> </asp:Menu>
|
Code 2.
Nada de difícil até agora, pois cada sistema tem a sua cor e imagem específica. Aconselho a mudar as cores de acordo com a necessidade do seu sistema. O próximo passo é colocar o código C# no Code 3.
protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { MenuItem _menuPai = null; MenuItem _menu = null; string _menuIndex = string.Empty;
foreach (DataRow itemMenu in new MenuBRL().ListarMenus().Rows) { if (_menuIndex != itemMenu["menIndex"].ToString().Substring(0, 2)) { _menuIndex = itemMenu["menIndex"].ToString().Substring(0, 2);
_menuPai = new MenuItem(" " + itemMenu["menDescricao"].ToString() + " ", itemMenu["menDescricao"].ToString(), "", itemMenu["menLink"].ToString());
menuSistema.Items.Add(_menuPai); } else { _menu = new MenuItem(itemMenu["menDescricao"].ToString(), itemMenu["menDescricao"].ToString(), "", itemMenu["menLink"].ToString());
_menuPai.ChildItems.Add(_menu); } } } } |
Code 3.
O retorno do banco de dados como DataRow é sim, dentro do foreach, já que alguns dados são verificados no decorrer do loop (foreach). Foi dado um espaço antes e depois do menu para ficar um pouco maior. Note as variáveis no início do método chamado MenuPai, esse é o primeiro menu e os demais submenus dei o nome de menu na minha aplicação.
Usei sempre o MenuItem (um método pronto do componente usado) para adicionar a descrição e o link vindos do banco de dados. No final do primeiro if adicionei o menuPai, no else adicionei o menuFilho chamado de menu com a variável do menuPai.
Assim, cada pai tem o seus filhos e assim por diante.
Bom, espero que tenham gostado e qualquer dúvida, pode entrar em contato pelo site.
Mauricio Junior
mauriciojunior.org
mauriciojunior.org/blog