Usuário com melhor resposta
dois itens de menu - retorno proc

Pergunta
-
estou lendo uma procedure onde o retorno da mesma está sendo de duas linhas.
então faço o seguinte:
SqlDataReader dr = cn.ListaMenu(); if (dr.HasRows) { while (dr.Read()) { menu.Title = dr["nom_menu"].ToString(); mnu.Items.Add(menu); } }
só que está incluindo somente o ultimo registro. pq? deveria incluir os dois registros que vem retorna da proc.
detalhe: está passando pelo while duas vezes, conforme retorno. porém, está montando o menu somente com o último registro.
Respostas
-
consegui.
value pra todos.
- Marcado como Resposta Harley Araujo segunda-feira, 21 de maio de 2012 13:41
Todas as Respostas
-
Olha esse exemplo
Menu masterTabMenu = NavigationMenu; // MenuItem RH = new MenuItem(); // RH.Text = "Recursos Humanos"; // MenuItem Rh1 = new MenuItem(); // Rh1.Text = "Cadastro Funcionário"; // Rh1.NavigateUrl = "~/forms/RH/Cadastrofuncionario.aspx"; // MenuItem Rh2 = new MenuItem(); // Rh2.Text = "Demonstrativo descontos; // Rh2.NavigateUrl = "~/About.aspx"; // MenuItem Rh3 = new MenuItem(); // Rh3.Text = "Gerar Arquivo"; // Rh3.NavigateUrl = "~/About.aspx"; // MenuItem Rh4 = new MenuItem(); // Rh4.Text = "Relatorio Usuário"; // Rh4.NavigateUrl = "~/forms/RH/RelatorioUsuarios.aspx"; // MenuItem Rh5 = new MenuItem(); // Rh5.Text = "Recrutamento"; // Rh5.NavigateUrl = "~/About.aspx"; // MenuItem Rh6 = new MenuItem(); // Rh6.Text = "Registrar Descontos"; // Rh6.NavigateUrl = "~/About.aspx"; // RH.ChildItems.Add(Rh1); // RH.ChildItems.Add(Rh2); // RH.ChildItems.Add(Rh3); // RH.ChildItems.Add(Rh4); // RH.ChildItems.Add(Rh5); // RH.ChildItems.Add(Rh6); // masterTabMenu.Items.Add(RH);
Junior
-
-
-
Para de preguiça e começa a pensar amigo...
Veja se esse exemplo funciona:
SqlDataReader dr = cn.ListaMenu(); if (dr.HasRows) { Menu mnu = NavigationMenu; while (dr.Read()){ MenuItem itm = new MenuItem(); itm.Text = dr["nom_menu"].ToString(); itm.NavigateUrl = "link"; mnu.Items.Add(menu); itm.Dispose(); } }
Não sei se vai funcionar, apenas peguei o seu código mais o código do Junior e juntei tudo.
Boa sorte!
Não esqueça de marcar como útil uma resposta que te ajude.
"A diversão é a alma do negócio" -
SqlDataReader dr = cn.ListaMenu(); if (dr.HasRows){ while (dr.Read()){ menu.Title = dr["nom_menu"].ToString(); mnu.Items.Add(menu); } }
É ajudando os outros que nos ajudamos...
-
Pessoal, acontece que meu resultado vem do retorno de uma procedure. por tanto eu não tenho como instanciar, exceto a minha classe para chamar minha procedure. e essa retorna uma SqDataReader. Vejam:
public SqlDataReader ListaMenu() { SqlCommand cmd = new SqlCommand(); cmd.CommandText = "retorna_menu"; cmd.CommandType = CommandType.StoredProcedure; cmd.Connection = conn; return cmd.ExecuteReader(); }
e aqui o que eu faço para chamar e preencher:
SqlDataReader dr = cn.ListaMenu(); if (dr.HasRows){ while (dr.Read()){ menu.Title = dr["nom_menu"].ToString(); mnu.Items.Add(menu); } }
por isso que não entendi por que devo instanciar. Até porque não estou usando o obejto menu do dot.net. estou fazendo na "mão". -
Rafa o problema não é como vc vai instanciar e sim colocar um indice no seu item do menu, pq como está ele passa o primeiro grava o nome e vc adiciona, ai vem o segundo registro ele faz a mesma coisa por cima do anterior por isso no seu menu so aparece o último.
veja isso
http://social.msdn.microsoft.com/Forums/pt-BR/aspnetpt/thread/d07d0dc8-8493-4d95-af09-12376d9c17cd
ou
http://imasters.com.br/artigo/19627/sql-server/montando-menu-dinamico-com-banco-de-dados-parte-final
ou
http://devutils.blogspot.com.br/2010/07/menu-dinamico-buscando-itens-de-menu-da.html
Junior
-
fiz as adaptações que preciso desses exemplos que você me passou e não funcionou. continua pegando o ultimo. fiz de outra forma também e nada, veja:
SqlDataReader dr = cn.ListaMenu(); if (dr.HasRows) { while (dr.Read()) { ModuloItem itm = new ModuloItem(); itm.descricao = dr["nom_menu"].ToString(); //itm.NavigateUrl = "link"; menu.Title = itm.descricao; mnu.Items.Add(menu); } }
minha classe ModuloItem:
public class ModuloItem { public Int32 idItem { get; set; } public string modulo { get; set; } public string descricao { get; set; } public string link { get; set; } }
onde estou errando?
-
fiz o seguinte: eu criei um array onde armazenos o resultado do retorno da proc. o que eu queria saber como posso atribuir os valores de uma array para um objeto e/ou variável. fiz o seguinte:
string[] menu_; menu_ = new string[2]; int i = 0; SqlDataReader dr = cn.ListaMenu(); if (dr.HasRows) { while (dr.Read()) { menu_[i] = dr["nom_menu"].ToString(); i = i + 1; } } menu.Title = menu_[]; mnu.Items.Add(menu);
só q quando faço menu.Title = menu_[] me dá erro de conversão. tem como eu atribuir para uma variável ou objeto um array, sem precisar percorre-lo? -
fiz também conforme primeiro exemplo e não funciona:
SqlDataReader dr = cn.ListaMenu();
if (dr.HasRows)
{
while (dr.Read())
{
ModuloItem moduloItemTemp = new ModuloItem();
moduloItemTemp.idItem = dr[
"id_menu"].ToString();
ModuloItemTemp.descricao = dr[
"nom_menu"].ToString();
objItemMenu.Add(moduloItemTemp);
}
}
for (int i = 0; i < objItemMenu.Count; i++)
{
menu.Title = objItemMenu[i].descricao;
mnu.Items.Add(menu);
}
-
consegui.
value pra todos.
- Marcado como Resposta Harley Araujo segunda-feira, 21 de maio de 2012 13:41
-
SqlDataReader dr = cn.ListaMenu(); if (dr.HasRows){ while (dr.Read()){ menu.Title = dr["nom_menu"].ToString(); mnu.Items.Add(menu); } }
Veja que neste seu exemplo você não cria (instancia) um novo menu para ser adicionado no mnu! Você simplesmente adiciona 2x o mesmo valor!
É ajudando os outros que nos ajudamos...
Você encontrou o que estava acontecendo, poste aqui pra sabermos, assim quando outras pessoas tiverem semelhantes dúvidas encontraram resultados antes de criar um novo tópico no forum!
Que bom que resolveu, boa sorte!É ajudando os outros que nos ajudamos...
-
consegui.
value pra todos.
Poste aqui como conseguiu, assim quando outras pessoas tiverem a mesma dúvida saberão como fazer...É ajudando os outros que nos ajudamos...