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 Junior



Utilizando 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.

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("&nbsp;&nbsp;" + itemMenu["menDescricao"].ToString() + "&nbsp;&nbsp;",

                                            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

Mauricio Junior

Mauricio Junior - Formado pela Faculdade Anhanguera, Especialista pela FGV (Fundação Getúlio Vargas), Pós-Graduação em Docência Superior e cursando Mestrado na UNB Engenharia Elétrica; . Tenho 29 anos e possuo sete livros publicados pela editora Ciência Moderna e sou editor do Linha de Código.
Sou Certificado Microsoft MCP, MCAD e MVP, faço parte da comunidade ASPNETI.COM, onde publico artigos, vídeos, ebooks e livros Publico artigos, vídeos e podcast em outras comunidades. Trabalho como Analista de Sistemas / Desenvolvedor na empresa ATP S/A.
Blog:
blog.mauriciojunior.org
Site pessoal: www.mauriciojunior.org