Usuário com melhor resposta
dropDowlist

Pergunta
-
Olá,
Tenho vários dropDowlist com valores de 1 a 8. O objetivo é de quando escolher um valor no primeiro dropdown para que ela desapareça dos outros, para não ser escolhido duas vezes. Está fazendo isso, mas só que se o usuário escolher por erro um valor e querer trocar esse valor por outro, pelo facto de ser selecionado uma vez já não aparece mais na lista dos outros dropDown, mesmo se voltar atrás. Por exemplo: No primeiro dropdow escolho o valor 2, mas afinal não era 2 mas sim 4. Corrijo para 4. O valor 2 já não aparece em mais nenhum dos outros dropDown.
Obrigado
protected void AlterarValores(object sender, EventArgs e) { var valorSelecionado = (sender as DropDownList).SelectedValue; if (!(sender as DropDownList).ID.Equals("DpA")) DpA.Items.Remove(new ListItem(valorSelecionado)); if (!(sender as DropDownList).ID.Equals("DpB")) DpB.Items.Remove(new ListItem(valorSelecionado)); if (!(sender as DropDownList).ID.Equals("DpC")) DpC.Items.Remove(new ListItem(valorSelecionado)); if (!(sender as DropDownList).ID.Equals("DpD")) DpD.Items.Remove(new ListItem(valorSelecionado)); if (!(sender as DropDownList).ID.Equals("DpE")) DpE.Items.Remove(new ListItem(valorSelecionado)); if (!(sender as DropDownList).ID.Equals("DpF")) DpF.Items.Remove(new ListItem(valorSelecionado)); if (!(sender as DropDownList).ID.Equals("DpG")) DpG.Items.Remove(new ListItem(valorSelecionado)); if (!(sender as DropDownList).ID.Equals("DpH")) DpH.Items.Remove(new ListItem(valorSelecionado)); if (!(sender as DropDownList).ID.Equals("DpI")) DpI.Items.Remove(new ListItem(valorSelecionado)); }
Respostas
-
Eu creio que voce esta usando a tatica errada. Voce poderia mostrar a interface (um printscreen) para que possamos compreender melhor o que voce quer fazer?
Eu vejo duas possibilidades:
1- Usar DropDownList em cascata. Quando voce seleciona um item da primeira, a segunda é carregada com os itens restantes. Quando um item da segunda é selecionada, a terceira é preenchida com itens restantes, etc.. A desvantagem é que isso te obriga a entrar os itens na ordem de A à I. Aqui esta um exemplo de como fazer isso:
http://www.aspsnippets.com/Articles/Creating-Cascading-DropDownLists-in-ASP.Net.aspx
2- Agora se o objetivo for selecionar 8 itens unicos em um ordem especifica, neste caso nao sao 8 dropdowns o mais indicado, sugiro usar esta soluçao:
A idéia é classica, voce tem uma lista com todos os valore disponiveis e outra com os valores selecionados. Uma vez que voce passa um valor do disponivel ao seleciona, este valor é retirado da lista disponivel (creio que seja esse o comportamento que voce esta tentando reproduzir).
No lado dos itens selecionados voce tem um controle para definir a ordem de seleçao.
Aqui esta o codigo completo desse controle:
http://www.codeproject.com/Articles/8219/Enhanced-List-Box-Control
Como eu disse, tudo vai depender do que voce quer fazer.
William John Adam Trindade
Analyste-programmeur
----------------------------------------------------------
- Marcado como Resposta Robson William SilvaModerator quinta-feira, 22 de setembro de 2016 12:42
Todas as Respostas
-
Eu creio que voce esta usando a tatica errada. Voce poderia mostrar a interface (um printscreen) para que possamos compreender melhor o que voce quer fazer?
Eu vejo duas possibilidades:
1- Usar DropDownList em cascata. Quando voce seleciona um item da primeira, a segunda é carregada com os itens restantes. Quando um item da segunda é selecionada, a terceira é preenchida com itens restantes, etc.. A desvantagem é que isso te obriga a entrar os itens na ordem de A à I. Aqui esta um exemplo de como fazer isso:
http://www.aspsnippets.com/Articles/Creating-Cascading-DropDownLists-in-ASP.Net.aspx
2- Agora se o objetivo for selecionar 8 itens unicos em um ordem especifica, neste caso nao sao 8 dropdowns o mais indicado, sugiro usar esta soluçao:
A idéia é classica, voce tem uma lista com todos os valore disponiveis e outra com os valores selecionados. Uma vez que voce passa um valor do disponivel ao seleciona, este valor é retirado da lista disponivel (creio que seja esse o comportamento que voce esta tentando reproduzir).
No lado dos itens selecionados voce tem um controle para definir a ordem de seleçao.
Aqui esta o codigo completo desse controle:
http://www.codeproject.com/Articles/8219/Enhanced-List-Box-Control
Como eu disse, tudo vai depender do que voce quer fazer.
William John Adam Trindade
Analyste-programmeur
----------------------------------------------------------
- Marcado como Resposta Robson William SilvaModerator quinta-feira, 22 de setembro de 2016 12:42
-
-
"Mas se mudar 2 na primeira para outro valor, o 2 deveria aparecer nos restantes, mas continua sem aparecer."
Sim.. isso é normal, voce removeu o item da lista. A nao ser que voce repreencha os itens removidos ao mudar a seleçao, nada é feito. Eu ainda acho essa sua estrategia errada.
Voce usando a um conjunto de DDLs para definir a ordem das alienas marcadas. Uma questao, se eu marco somente a primeira e a ultima aline, eu posso definir a hierarquia como 7 (para a primeira) e 2 (para a segunda) ?
William John Adam Trindade
Analyste-programmeur
----------------------------------------------------------
-
-
Pessoalmente eu usaria o caso 2 do meu primeiro post.
No seu caso, voce nao tme escolha... a cada selecao da DDL sera necessario repreencher as dropdownlists nao selecionadas somente com valores nao utilizados..
Nao é a melhor pratica, mas nao vejo outra soluçao.
Att
William John Adam Trindade
Analyste-programmeur
----------------------------------------------------------