Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Diego Engel

[Resolvido] Preenchimento dinâmico

Recommended Posts

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 ??

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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 !!

Compartilhar este post


Link para o post
Compartilhar em outros sites

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 ??

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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+

Compartilhar este post


Link para o post
Compartilhar em outros sites

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 !!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

É 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 :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

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 !!

Compartilhar este post


Link para o post
Compartilhar em outros sites

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 :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

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á ??

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.