Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Galera...
Tenho uma estrutura de Labels que será meu menu, porém esses labels receberão valores diferentes de acordo com o menu do usuário.
No momento que a página é carregada, o id do grupo do usuário é identificado e é feito um select na base, trazendo ID_GRUPO, ID_MENU, ID_SUBM, SUBM_NOME e LINK. Dessa forma tenho todos os menus e sub-menus que o grupo a qual aquele usuário pertence tem acesso.
Agora, não tenho idéia de como faço pra jogar os valores da coluna SUBM_NOME nessas labels de forma automática...
Alguém tem alguma sugestão...
ps.: probleminha extra, nesse select tbm será trazido o link do sub-menu, como faço pra jogar esse link na tag href ??
Comecei a fazer dessa forma porque pretendo usar javascript pra "embelezar" o menu depois...
tendo esses valores no gridview.. como faço pra joga-los nos hyperlinks.. ??
A mesma consulta que utilizou para carregar a grid irá utilizar pra alimentar seus hyperlinks. Só que terá que usar um DataReader.
A quantidade de hyperlinks será dinâmica? Se sim, como pretende fazer isso?
Abraços...
>
A mesma consulta que utilizou para carregar a grid irá utilizar pra alimentar seus hyperlinks. Só que terá que usar um DataReader.
A quantidade de hyperlinks será dinâmica? Se sim, como pretende fazer isso?
Abraços...
Então... Usei um DataReader pro gridview.. segue abaixo....
MySqlConnection connection = new MySqlConnection(MyConString);
MySqlCommand command = new MySqlCommand(MyCommand, connection);
MySqlDataReader DataReader;
connection.Open();
DataReader = command.ExecuteReader();
gvwTeste.DataSource = DataReader;
gvwTeste.DataBind();
connection.Close();
DataReader.Close();
Na verdade cara... estou aprendendo meio q na porrada, na base do Ctrl+C... não sei exatamente o q significa cada coisa que tah nesse código...
E a quantidade de Hyperlinks será dinâmica, porém não tenho a mínima idéias de como fazer isso...
to fu..
Cara acho que você esta indo por um caminho meio dificil, o melhor era usar o componente de menu do Visual Studio e deixar ele "bonitinho" com css.
Mas se quiser ainda sim utilizar os Hyperlink e cria-los de forma dinâmica, acho que será mais fácil utilizar o repeater: http://www.macoratti.net/aspn_rep.htm
Abraços...
>
Cara acho que você esta indo por um caminho meio dificil, o melhor era usar o componente de menu do Visual Studio e deixar ele "bonitinho" com css.
Mas se quiser ainda sim utilizar os Hyperlink e cria-los de forma dinâmica, acho que será mais fácil utilizar o repeater: http://www.macoratti.net/aspn_rep.htm
Abraços...
Mas cara... se eu utilizar o componente de menu do VS2005... esses dados que eu peguei do select com os menus e links q cada grupo tem acesso serão desnecessários ???
E outro.. o menu q tem no VS parece ser só na vertical né? gostaria de fazer na horizontal..
Não serão desnecessários, pelo contrário precisará disso para alimentar seu menu.
E pro menu ficar na horizontal basta mudar uma propriedade do menu, ele funciona tanto na vertical como na horizontal.
Abraços...
>
Não serão desnecessários, pelo contrário precisará disso para alimentar seu menu.
E pro menu ficar na horizontal basta mudar uma propriedade do menu, ele funciona tanto na vertical como na horizontal.
Abraços...
Estava fuçando nas opções do menu...
Mas até agora não conseguir pensar/entender como farei pra deixar o menu personalizado com o perfil, pelo o q eu vi nas propriedades não vi muitas coisas a fazer.
Um menu estático ficaria bem simples de fazer, mas um menu dinâmico não tenho idéia de como sería..
No resultado do meu select já tenho todas as informações necessárias para o menu, nome do menu, submenu e link .... tendo um menu q eu só precise jogar esse valores dentro já tah beleza !!
Cara existe uma imensidão de propriedades e formas de montar o menu. Alguns links:
http://www.macoratti.net/aspn_cmn.htm
http://www.linhadecodigo.com.br/Artigo.aspx?id=1689
Abraços...
Cara....
Legal demais os links... consegui monter um menu legal... seguindo o link do macoratti..
Agora... existe alguma forma pra gerer um arquivo sitemap baseado nos resultados do meu select ??
Olha meu menu hoje é gerado por uma consulta no banco, mas não utilizo sitemap, vou ver se encontro algo para postar aqui.
Edit.: Da uma olhada nesse link: http://www.bufaloinfo.com.br/artigos/artigo24082005.asp
É um cadastro de sitemap, apesar de ser um projeto windows você pode pegar a lógica e desenvolver para web.
Abraços...
Diego, eu fiz um esquema e deu certo, estou usando um componente chamado MENU próprio Visual Studio.
Eu já tenho minha tabelas e também minha procedures para me retornar os menus e submenus, o que vou postar aqui é só para você ter alguma idéia, eu fiz agora pouco, deve ter coisas a serem melhoras é claro
mas espero que ajuda!.
pagina aspx
<form id="form1" runat="server">
<div>
<asp:Menu ID="Menu1" runat="server"></asp:Menu>
</div>
</form>
como eu fiz tudo na unha não usei a parte gráfica, então eu adicionei o menu assim: <asp:Menu ID="Menu1" runat="server"></asp:Menu> na minha página aspx
meu arquivo. cs
protected void Page_Load(object sender, EventArgs e)
{
if (Session["USUARIOID"] != null)
{
string id = Session["USUARIOID"].ToString();
int IdUsuario = int.Parse(id);
DataSet ds = Menu.GetMenu(IdUsuario);
foreach (DataRow dr in ds.Tables[0].Rows)
{
MenuItem item = new MenuItem();
item.Text = dr["NOMEMENU"].ToString();
Menu1.Items.Add(item);
string idmenu = dr["IDMENU"].ToString();
int IDmenu = int.Parse(idmenu);
DataSet DsSubMenu = SubMenu.GetSubMenu(IDmenu, IdUsuario);
foreach (DataRow DrSubMenu in DsSubMenu.Tables[0].Rows)
{
MenuItem SubItem = new MenuItem();
SubItem.Text = DrSubMenu["NOMESUBMENU"].ToString();
SubItem.NavigateUrl = "";
item.ChildItems.Add(SubItem);
}
}
}
else
{
Response.Redirect("/login.aspx");
}
}
qualquer coisa na quarta feira eu posso explicar o que eu fiz ai passo a passo!
t+
Putz.. cara.. legal pra caramba !!!!
Fiquei boiando naquela para de "session"...
mas na quarta-feria.. se puder me explicar melhor... ficarei imensamente agradecido !!!
abraço !!!
É bem simples Diego.
Session é bastante usado para guardar informações que serão usadas diversas vezes no sistema.
Session["USUARIOID"] é o local onde o David armazenou o ID do usuário que logou no sistema dele.
O código é bem simples, para cada linha do dataset que ele buscou do banco, ele adicionou um MenuItem, que seria o menu pai.
Depois para cada filho do pai, ele adicionou um outro MenuItem usando ChildItems.Add();
Um exemplo estrutura final do menu ficaria assim:
-Home
-Cadastros
---Incluir
---Alterar
---Exluir
-Sobre
---Sistema
---Contato
Incluir, Alterar, Excluir MenuItens são Childs do MenuItem Cadastros.
Espero não ter complicado mais :)
As coisas estão começando a ficar mais claras agora.. mas vamos lá...
Segue o código com comentários em algumas linhas...
if (Session["USUARIOID"] != null)
{
string id = Session["USUARIOID"].ToString();
//criou uma variável pra armazenar o valor de USUARIOID
int IdUsuario = int.Parse(id);
//essa eu não entendi
DataSet ds = Menu.GetMenu(IdUsuario);
//Criou um dataset (ds) porém não entendi após isso... menu.GetMenu(IdUsuario) ?
foreach (DataRow dr in ds.Tables[0].Rows)
// ??
{
MenuItem item = new MenuItem();
// Acredito que MenuIte foi uma classe criada, e ai ele instancia um objeto MenuItem
item.Text = dr["NOMEMENU"].ToString();
//o objeto cirado recebe o nome do menu, porém não entendi o 'dr'
Menu1.Items.Add(item);
// acredito que seja uma propriedade do MENU
string idmenu = dr["IDMENU"].ToString();
// nova variável .. continuo não entendendo o 'dr'
int IDmenu = int.Parse(idmenu);
//essa eu não entendi
DataSet DsSubMenu = SubMenu.GetSubMenu(IDmenu, IdUsuario);
// mais uma dataset criado.. mas depois... "???"
foreach (DataRow DrSubMenu in DsSubMenu.Tables[0].Rows)
{
MenuItem SubItem = new MenuItem();
SubItem.Text = DrSubMenu["NOMESUBMENU"].ToString();
SubItem.NavigateUrl = "";
item.ChildItems.Add(SubItem);
}
}
}
else
{
Response.Redirect("/login.aspx");
}
Não comentei todas.. se pudesse explicar passo a passo cada linha....
Em que momento ele tem as informações do banco para poder criar menus e tudu mais ??
Po galera.. fico ateh sem jeito.. mas so leigo no assunto.. espero um dia poder ajudar a galera aqui !!
Sem problemas Diego :)
Então,
A variavel id é do tipo string, essa linha aqui:
int IdUsuario = int.Parse(id);Vai converter de string para inteiro e joga na nova variavel IdUsuario.
DataSet ds = Menu.GetMenu(IdUsuario);É justamente aqui que ele busca as informações do banco, Menu é uma classe que ele criou, GetMenu(int) é o método que busca essas informações e retornar um dataset com todos os menus Pai que aquele usuário tem permissão.
foreach (DataRow dr in ds.Tables[0].Rows)Chamado de iteração, é que um DataTable é composto de vários DataRow, como se fosse um banco de dados.A linha ali de cima vai fazer um loop em todas as linhas do DataTable. Porque? Porque ele vai precisar pegar essas linhas e jogar no objeto de menu, que seria este trecho aqui:
Menu1.Items.Add(item);Onde Menu1 é o componente <asp:Menu>
dr é o nome da variavel DataRow (veja no foreach), para cada linha ele tem várias colunas também, neste caso ele tem as colunas: e "IDMENU", "NOMEMENU", e você acessa as colunas de uma linha usando dr[nome_da_coluna].
O resto é repetição, so que agora para o submenu, veja que existe novamente outro método para buscar o menu do banco e jogar em um dataset. Depois disso ele faz novamente um loop e adiciona no menu.
Tente fazer um, e coloque o resultado aqui, se tiver problemas veremos o que podemos fazer :)
>
Sem problemas Diego :)
DataSet ds = Menu.GetMenu(IdUsuario);É justamente aqui que ele busca as informações do banco, Menu é uma classe que ele criou, GetMenu(int) é o método que busca essas informações e retornar um dataset com todos os menus Pai que aquele usuário tem permissão.
Não sei se o q eu to falando tem alguma coisa a ver.. mas o dataset q ele usa é como se fosse meu datagrid ??
Ou tem mais a ver com o datareader ??
Alguém conhece um tópico aqui no forum q fala sobre esses data blá blá blá ??
DataSet (DS) está mais relacionado com DataReader (DR).
Veja datareader x dataset
DataGrid não tem entra no comparativo pois é apenas um componente para mostrar dados, assim como o GridView.
A grande diferença de usar DS é que os dados estão todos em memória enquanto DR busca dados conectado no banco.
Pessoal,
estou tentando fazer aqui o menu de acordo com o código que nosso amigo passou.. mas estou com um problema que eu acredito ser besta...
Criei as classes clsMenu e clsSubmenu... porém não consigo fazer o meu aquivo .cs reconhecer essas classe.... os erros (fora de contexto) aparecem nessas duas linhas...
DataSet ds = clsMenu.GetMenu(IdUsuario);
DataSet DsSubMenu = clsSubmenu.GetSubMenu(IDmenu, IdUsuario);
além disso gostaria de esclarecer mais algumas dúvidas...
1- "NOMEMENU","IDMENU","NOMESUBMENU" são colunas do banco ??
2- O comando ".GetMenu(IdUsuario); " é um método dentro de uma classe que faz a conexão com o banco e alimenta o dataset ??
3- Em determinado momento do código é instanciado o objeto item de MenuItem... esse "MenuItem" é default do vs2005 ?? pois aparece em azul claro no código.
0) você está acessando um método da classe quando você faz isso:
DataSet ds = clsMenu.GetMenu(IdUsuario);Até daria certo assim, mas dai o método GetMenu deve ser definido como static.o certo seria:
clsMenu menu = new clsMenu();
DataSet ds = menu.GetMenu(IdUsuario);Neste caso, GetMenu é um método da instância de clsMenu, e não da classe.
1) Sim, são colunas do banco.
2) Correto.
3) MenuItem é uma classe do framework .net. Qualquer classe aparece em azul claro.
>
0) você está acessando um método da classe quando você faz isso:
DataSet ds = clsMenu.GetMenu(IdUsuario);Até daria certo assim, mas dai o método GetMenu deve ser definido como static.o certo seria:
clsMenu menu = new clsMenu();
DataSet ds = menu.GetMenu(IdUsuario);Neste caso, GetMenu é um método da instância de clsMenu, e não da classe.
1) Sim, são colunas do banco.
2) Correto.
3) MenuItem é uma classe do framework .net. Qualquer classe aparece em azul claro.
Uhuuuuu....
Galera... valeu.. consegui.. o menu surgiu quase da forma como eu queria...rsrsrs.. na verdade as informações carregadas no menu são verdadeiras !!! tah td certo.. porém... qdu clico no link do menu... ele recarrega a página e cria um novo menu em baixo do menu antigo..
E outra coisa... como atribuo os links para esses menus ??
Abraço !!!
Po galera... tive mais uma dúvida.... pq foi dado como tópico resolvido ??
é provavel por que disse que conseguiu
resolvido retirado
Diego, desculpe, engano meu.
Para adicionar links use a propriedade NavigateUrl do seu MenuItem:
SubItem.NavigateUrl = "http://www.google.com.br";
Galera.... está tudo dentro dos conformes....
Mas antes de fechar este tópico.. gostaria de tirar uma última dúvida..
É possível tirar aquela seta preta q fica ao lado do MENU qdu este possue submenus ??
Movido Plataforma .NET http://forum.imasters.com.br/public/style_emoticons/default/seta.gif Plataforma .NET » Web Applications
Você terá que usar um DataReader para alimentar suas labels, mas como possui link aconselho a não utilizar Label e sim HyperLink.
E na verdade como é um menu, o ideal seria utilizar um componente de menu.
Abraços...