25 de mai. de 2011

Adicionando Items do ListBox para um CheckBoxList

Pessoal, postei uma dúvida no Fórum do Dev Brasil e recebi uma excelente resposta do colega Ramon Wolff Zaccaron.
Pergunta: gostaria de saber como adicionar os items de um listbox para um checkboxlist, só tem um pequeno detalhe: se no listbox tiver algum item repetido ou vazio, ele não deve adicionar no checkboxlist.
Resposta: Antes de lhe ajudar na sua dúvida, quero lhe informar que existe mais de uma maneira de resolver este problema.
Abaixo segue o código que acredito suprir sua necessidade:

    protected void btnAdd_Click(object sender, EventArgs e)
    {
        IList<ListItem> chklList = new List<ListItem>();

        foreach (ListItem item in this.lstSource.Items)
        {
            //Caso a variável item necessite de algum tratamento
            //realizar neste ponto.         

            if ((!string.IsNullOrEmpty(item.Text)) && !chklList.Contains(item))
            {
                chklList.Add(item);
            }
        }

        if (chklList.Count > 0)
        {
            foreach (ListItem item in chklList)
            {
                this.chklTarget.Items.Add(item);
                //this.chklTarget.Items.Add(item.Text);
            }
        }
    }

...onde:

lstSource - Control ListBox;
chklTarget - Controle CheckBoxList;
btnAdd - Controle Button que utilizei para adicionar os itens.

Primeiramente eu declaro um objeto do tipo IList<ListItem>, não sei qual sua necessidade mas eu fiz com uma lista deste tipo pois cada item de um ListBox ou CheckBoxList é deste tipo compondo um ListItemCollection. Pode alterar para outro tipo (primitivo ou não). Este objeto irá receber a lista filtrada do ListBox.

Com um "foreach" eu percorro os itens do ListBox. Note o meu comentário onde o tratamento dos valores do ListBox deve ocorrer, caso precise. Trabalhar com a variável pode ser necessário (LTrim, RTrim, Replace, etc.) se você estiver utilizando um IList do tipo string por exemplo.

A seguir, a verificação que você especificou é realizada, onde neste exemplo a propriedade Text é verificada, você pode também verificar a propriedade Value se for o caso.

Caso não haja irregularidades com a variável, a mesma é adicionada em nossa lista. A verificação será realizada com cada item do ListBox.

Por fim, uma validação é feita na lista verificando se esta possui items. Caso sim, adiciona no controle CheckBoxList (chklTarget). Note que o método Add possui duas sobrecargas, a primeira irá adicionar o item igual como está no ListBox e suas propriedades (Text, Value...). A segunda sobrecarga irá adicionar o texto dos itens do ListBox, ou seja as propriedades Value e Text será a mesma, o que funcionará normal, porém, caso valores e textos são diferentes no ListBox, neste controle será igual.

Cátia, um refactor será bem vindo neste código, validações podem ser necessárias, caso você não saiba quais dados podem estar listados no ListBox, se forem valores estáticos fica mais fácil. Caso tenha alguma dúvida pode perguntar ou caso não funcione informe que a gente discute o assunto.

Quem quiser ver na íntegra: http://devbrasil.net/group/cdesenvolvendores/forum/topics/adicionando-items-do-listbox?commentId=2307362%3AComment%3A95735&xg_source=msg_com_gr_forum

2 comentários:

  1. Azá! Aprendendo a trabalhar com fóruns? Sempre tem um pessoal parceiro....

    ResponderExcluir
  2. Sim, pessoal muito parceiroo..
    Fazer o quê néah? Temo q se vira ai..

    ResponderExcluir