Usuário com melhor resposta
Dropdownlist - Itens com mesmo value

Pergunta
-
<asp:DropDownList runat="server" ID="ddlTamanho"> <asp:ListItem Value="6">tamanho 1</asp:ListItem> <asp:ListItem Value="6">tamanho 2</asp:ListItem> <asp:ListItem Value="6">tamanho 3</asp:ListItem> <asp:ListItem Value="6">tamanho 4</asp:ListItem> </asp:DropDownList>
Tenho um drop semelhante a este onde tenho tamanhos diferentes com mesmo value (que utilizo como uma informação secundária). Porém, se tenho tamanhos diferenets mas com mesmo value quando tento utilizar o
Response.Write("tamanho: " + ddlTamanho.SelectedIndex);
Pra exibir o item selecionado ele joga sempre no index 0. Se o value é diferente ele funciona normalmente. Mas eu preciso e uma situação do value e em outra do Text do item selecionado. Alguem sabe o que fazer para acabar com esse problema?
Obrigado
Juan Nogueira
Visite o meu site:
www.juannogueira.com.br
Se foi útil, marque como resposta e faça a alegria de um programador :)
Respostas
-
Tucão e se você concatenar o seu Value? Por exemplo?
<asp:ListItem Value="Tamanho1 - 6">tamanho 1</asp:ListItem> <asp:ListItem Value="Tamanho2 - 6">tamanho 2</asp:ListItem> <asp:ListItem Value="Tamanho3 - 6">tamanho 3</asp:ListItem> <asp:ListItem Value="Tamanho4 - 6">tamanho 4</asp:ListItem>
Se a resposta foi útil por favor qualifique! Janderson Candido de Mattos - MCTS
- Marcado como Resposta Juan Nogueira segunda-feira, 13 de agosto de 2012 16:26
-
Então configure seu dt (o que suponho q seja uma DataTable) para inserir uma nova coluna com as colunas tamanho e preço concatenadas. Faça com que sua table fique assim:
tamanho | preco | tamanhoPreco
tam1 | 5 | tam1-5
Tendo essa coluna dinâmica, adicione-a no seu DataValueField.
Rafael Santos
Observações:
1. Selecione a opção "Habilitar o Live Alerts por Padrão" nas suas configurações para que possa acompanhar em tempo real as atividades relacionadas a sua Thread;
2. Não abandone sua Thread. Ao perguntar, fique atento às respostas; ao encontrar uma solução, compartilhe;
3. As pessoas que dedicam seu tempo na busca por soluções para você não ganham nada em troca. Valorize-as e em forma de agradecimento pontue as respostas corretas.
"Quem disse que não escrevo poesias? A diferença é que as minhas começam com using System;"- Marcado como Resposta Juan Nogueira segunda-feira, 13 de agosto de 2012 16:25
-
Juan apenas complementando as sugestões do pessoal acima, caso você venha a adotar a solução aonde ira concatenar os valores do seu DataTable, você pode adicionar uma coluna e atribuir uma expression para ele, vamos supor que o nome do DropDownList é ddlPrecos, veja:
//Simulando retorno do banco de dados DataTable dt = new DataTable(); //Colunas que ja existe no seu DataTable dt.Columns.Add(new DataColumn("preco", typeof(string))); dt.Columns.Add(new DataColumn("tamanho", typeof(string))); //Sua nova coluna combinando preco + tamanho dt.Columns.Add(new DataColumn("combinado", typeof(string), "preco +' '+ tamanho")); //Valores Fake dt.Rows.Add("10.50", "G"); dt.Rows.Add("78.30", "GG"); dt.Rows.Add("13.50", "P"); //Atribuindo ao DropDownList ddlPrecos.DataSource = dt; ddlPrecos.DataTextField = "tamanho"; ddlPrecos.DataValueField = "combinado"; ddlPrecos.DataBind();
Resultado após renderizado:
Vitor Mendes | Seu feedback é muito importante para todos!
Visite o meu site: http://www.vitormendes.com.br/- Marcado como Resposta Juan Nogueira segunda-feira, 13 de agosto de 2012 16:29
- Editado Vitor Mendes segunda-feira, 13 de agosto de 2012 16:30
Todas as Respostas
-
Juan,
Você esta mandando escrever o indice, logo se você não especificar qual o indice que você esta selecionando, o defaut é 0(zero) assim o ideal ou você setar o indice para Ex: selectedindex = 2 e em seguida para escrever o tamando usar
ddlTamanho.Selectedindex = 2;
Response.Write("tamanho: " + ddlTamanho.text) ou
Response.Write("tamanho: " + ddlTamanho.Selectedvalue)
é sempre bom aprender um pouco mais. - www.tanabiblia.com.br
- Editado Cleidiano - Energia Total Energia Solar segunda-feira, 13 de agosto de 2012 15:55
-
Tucão e se você concatenar o seu Value? Por exemplo?
<asp:ListItem Value="Tamanho1 - 6">tamanho 1</asp:ListItem> <asp:ListItem Value="Tamanho2 - 6">tamanho 2</asp:ListItem> <asp:ListItem Value="Tamanho3 - 6">tamanho 3</asp:ListItem> <asp:ListItem Value="Tamanho4 - 6">tamanho 4</asp:ListItem>
Se a resposta foi útil por favor qualifique! Janderson Candido de Mattos - MCTS
- Marcado como Resposta Juan Nogueira segunda-feira, 13 de agosto de 2012 16:26
-
Utilizei o index como exemplo, na verdade as informações que eu pego são: value e text do item selecionado. No caso quando tenho todos os itens com o mesmo values ele da conflito no item selecionado. Se todos os itens tem o mesmo value independente de qual eu seleciono, ele sempre seleciono ele pega sempre o value e text do primeiro.
Juan Nogueira
Visite o meu site:
www.juannogueira.com.br
Se foi útil, marque como resposta e faça a alegria de um programador :) -
Eu pensei nisso! Só que nessa eu cai em outro probleminha.
Por exemplo, no caso real eu preencho o drop com informações do banco, da seguinte maneira:
ddlTamanhoPreco.DataSource = dt; ddlTamanhoPreco.DataTextField = "tamanho"; ddlTamanhoPreco.DataValueField = "preco"; ddlTamanhoPreco.DataBind();
Só que dessa maneira eu não sei como atribuir um value concatenado.
Juan Nogueira
Visite o meu site:
www.juannogueira.com.br
Se foi útil, marque como resposta e faça a alegria de um programador :) -
Então configure seu dt (o que suponho q seja uma DataTable) para inserir uma nova coluna com as colunas tamanho e preço concatenadas. Faça com que sua table fique assim:
tamanho | preco | tamanhoPreco
tam1 | 5 | tam1-5
Tendo essa coluna dinâmica, adicione-a no seu DataValueField.
Rafael Santos
Observações:
1. Selecione a opção "Habilitar o Live Alerts por Padrão" nas suas configurações para que possa acompanhar em tempo real as atividades relacionadas a sua Thread;
2. Não abandone sua Thread. Ao perguntar, fique atento às respostas; ao encontrar uma solução, compartilhe;
3. As pessoas que dedicam seu tempo na busca por soluções para você não ganham nada em troca. Valorize-as e em forma de agradecimento pontue as respostas corretas.
"Quem disse que não escrevo poesias? A diferença é que as minhas começam com using System;"- Marcado como Resposta Juan Nogueira segunda-feira, 13 de agosto de 2012 16:25
-
Perfeito. Consegui resolver o problema dessa maneira. Obrigado as duas respostas que me ajudaram.
Estou utilizando Mysql, pra quem quiser saber como eu fiz a concatenação vai um exemplo:
SELECT CONCAT(Tamanho, '-', CONVERT(preco,CHAR)) as tamanho_preco FROM tamanho_produto;
Obrigado
Juan Nogueira
Visite o meu site:
www.juannogueira.com.br
Se foi útil, marque como resposta e faça a alegria de um programador :) -
Juan apenas complementando as sugestões do pessoal acima, caso você venha a adotar a solução aonde ira concatenar os valores do seu DataTable, você pode adicionar uma coluna e atribuir uma expression para ele, vamos supor que o nome do DropDownList é ddlPrecos, veja:
//Simulando retorno do banco de dados DataTable dt = new DataTable(); //Colunas que ja existe no seu DataTable dt.Columns.Add(new DataColumn("preco", typeof(string))); dt.Columns.Add(new DataColumn("tamanho", typeof(string))); //Sua nova coluna combinando preco + tamanho dt.Columns.Add(new DataColumn("combinado", typeof(string), "preco +' '+ tamanho")); //Valores Fake dt.Rows.Add("10.50", "G"); dt.Rows.Add("78.30", "GG"); dt.Rows.Add("13.50", "P"); //Atribuindo ao DropDownList ddlPrecos.DataSource = dt; ddlPrecos.DataTextField = "tamanho"; ddlPrecos.DataValueField = "combinado"; ddlPrecos.DataBind();
Resultado após renderizado:
Vitor Mendes | Seu feedback é muito importante para todos!
Visite o meu site: http://www.vitormendes.com.br/- Marcado como Resposta Juan Nogueira segunda-feira, 13 de agosto de 2012 16:29
- Editado Vitor Mendes segunda-feira, 13 de agosto de 2012 16:30
-
Obrigado pela resposta Vitor!
Agora só uma dúvida. Acabei fazendo a concatenação direto na instrução select. Realizando a concatenação via código ganharia em questão de desempenho?
Obrigado
Juan Nogueira
Visite o meu site:
www.juannogueira.com.br
Se foi útil, marque como resposta e faça a alegria de um programador :) -
Juan não sei te afirmar, teria que comparar o custo desta operação, o quanto isso pesaria no seu MySQL. Creio que a solução que eu propus não consumiria tanto recurso pelo fato destas informações ja estarem no seu DataTable, imagina que quando esta coluna é invocada (coluna combinada), um macro interno é disparado, pegando esta expressão, executando e retorando os valores devidamente tratado de acordo com a expressão.
Fica ai um bom tema para se estudar com o tempo Juan
=DVitor Mendes | Seu feedback é muito importante para todos!
Visite o meu site: http://www.vitormendes.com.br/ -
Acredito que a nível de aplicação, fazendo na query - e de preferencia diretamente no banco através de procedure - você ganha em desempenho, pois exime-se de criar métodos manipulação no DataTable.
Rafael Santos
Observações:
1. Selecione a opção "Habilitar o Live Alerts por Padrão" nas suas configurações para que possa acompanhar em tempo real as atividades relacionadas a sua Thread;
2. Não abandone sua Thread. Ao perguntar, fique atento às respostas; ao encontrar uma solução, compartilhe;
3. As pessoas que dedicam seu tempo na busca por soluções para você não ganham nada em troca. Valorize-as e em forma de agradecimento pontue as respostas corretas.
"Quem disse que não escrevo poesias? A diferença é que as minhas começam com using System;"