none
dropDowlist RRS feed

  • 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));
    
        }
    

    terça-feira, 20 de setembro de 2016 11:45

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.

    Att


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    terça-feira, 20 de setembro de 2016 13:14
    Moderador

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.

    Att


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    terça-feira, 20 de setembro de 2016 13:14
    Moderador
  • Não é nenhum desses casos. Aqui por exemplo escolhi 2 na primeira dropDow. Na segunda já não aparece. Até aqui tudo bem. Mas se mudar 2 na primeira para outro valor, o 2 deveria aparecer nos restantes, mas continua sem aparecer.
    terça-feira, 20 de setembro de 2016 13:44
  • "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
    ----------------------------------------------------------

    terça-feira, 20 de setembro de 2016 14:12
    Moderador
  • Sim. Isso não tem de ser seguido. Foi só um exemplo para mostrar aqui. Pode ser 7 logo na primeira opção e 1 na última. É o grau de importância que dá para uma determinada causa.
    terça-feira, 20 de setembro de 2016 14:32
  • 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
    ----------------------------------------------------------

    terça-feira, 20 de setembro de 2016 15:12
    Moderador