Olá pessoal, hoje gostaria de falarcomo é fácil criar um menu dinâmico de acordo com o banco de dados. Em artigosantigos, eu mostrei como utilizando menu dinâmico com XML e agora gostaria demostrar algumas manhas para montar o menu com o componente .NET dinamicamente.

 

Referência:

Visual Studio .NET2008 ou 2010

Linguagem C#.NET

Banco de dados SQLServer

 

         Não tem segredo, mas peço que acompanheo passo a passo do artigo para não ter erro. Lembrando que cada exemplo abaixofoi feito de forma real e com códigos reais.

         O primeiro passo é projetar o banco dedados de maneira que fique dinâmico e limpo, com links e nomes dos menus quevão aparecer na tela. No caso de permissão de usuário ou não, crie um campoespecífico que defina essa característica ou então crie uma outra tabela dejunção do usuário com o menu. Assim basta passar apenas o usuário logado epronto.

 

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 é trazeros campos necessários para montar o menu com descrição, index e link. O campoindex provê e identifica qual é o menu principal e quais são os menus abaixodele.

 

Arquivo .ASPX ou MasterPage

        

         Passando agora para o arquivo .aspx ou.master (o menu pode ser carregado dentro de algum desses tipos de arquivos eoutros 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 sistematem a sua cor e imagem específica. Aconselho a mudar as cores de acordo com anecessidade 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 comoDataRow é sim, dentro do foreach alguns dados são verificados no decorrer doloop (foreach). Foi dado um espaço antes e depois do menu para ficar um poucomaior. Note as variáveis no início do método chamado MenuPai, esse é o primeiromenu e os demais submenus dei o nome de menu na minha aplicação.

         Usei sempre o MenuItem (um métodopronto do componente usado) para adicionar a descrição e o link vindos do bancode dados. No final do primeiro if, adicionei o menuPai no else adicionei omenuFilho chamado de menu com a variável do menuPai.

         Assim, cada pai tem o seus filhos eassim por diante.

         Bom, espero que tenham gostado equalquer dúvida, pode entrar em contato pelo site.


Tags: Menu, banco de dados, menu dinâmico, asp:menu, foreach