none
guardar id em listbox/checkedlistbox RRS feed

  • Pergunta

  • Opa!

    Bom, me acostumei a sempre que faço uma consulta em banco de dados, retornar o valor que eu quero(string) e sua id correspondente no banco(inteiro).

    Com uma treeview no nó eu sempre mostro o valor e salvo na tag a id. Beleza sempre resolve meus problemas de posteriores consultas e tal.

    Agora estou fazendo a mesma coisa com uma checked list box e vou ter q fazer tambem com uma listbox. Mas elas nao tem tags nos seus itens. Tem alguma maneira de fazer a mesma coisa?

    quarta-feira, 24 de novembro de 2010 12:20

Respostas

  • Testei usando o Framework 3.5 e 4 num projeto WindowsForms. Ambos funcionaram. Ex:

    List<dados> colecao;
    colecao = new List<dados>()
    {
      new dados{ID=1,Nome="Fulano"},
      new dados{ID=2,Nome="Ciclano"},
      new dados{ID=3,Nome="Teste"}
    };

    CheckedListBox chkList = new CheckedListBox();
    this.Controls.Add(chkList);

    chkList.DataSource = colecao;
    chkList.DisplayMember = "Nome";
    chkList.ValueMember = "ID";

    chkList.ItemCheck+=delegate
    {
      MessageBox.Show(chkList.SelectedValue.ToString());
    };

    struct dados
    {
      public int ID { get; set; }
      public String Nome { get; set; }
    }

     

    Abs.

    Fabiano

    • Marcado como Resposta JeffersonDF quarta-feira, 24 de novembro de 2010 16:12
    quarta-feira, 24 de novembro de 2010 14:02
  • Olá Jefferson, usa o seguinte:

    listTeste.DataSource = DataSet; // ou uma coleção qualquer
    listTeste.DisplayMember = "Nome";
    listTeste.ValueMember = "ID";

    Abs.

    Fabiano

     

    • Marcado como Resposta JeffersonDF quarta-feira, 24 de novembro de 2010 12:40
    • Não Marcado como Resposta JeffersonDF quarta-feira, 24 de novembro de 2010 13:06
    • Sugerido como Resposta Marcus Paulo Couto quarta-feira, 24 de novembro de 2010 14:42
    • Marcado como Resposta JeffersonDF quarta-feira, 24 de novembro de 2010 16:12
    quarta-feira, 24 de novembro de 2010 12:29
  • Olá Jefferson, 

    Um jeito que já fiz para conseguir buscar o valor de um CheckedListBox, foi concatenar o ID com o NOME antes de adicionar no CheckedListBox, exemplo:

    string nome="Teste";
    int id = 1;
    checkedListBox1.Items.Add(id.ToString() + "-" + nome);
    

     

    O resultado no ListBox para este caso seria o seguinte: 1-Nome
    Obviamente você iria adicionar os Items através de um loop em um dataSet por exemplo, mas o mais importante é que depois disso você conseguirá pegar o ID fazendo um tratamento na string do item marcado no checkedListBox:

     

     foreach (string item in checkedListBox1.CheckedItems)
      {
      int id = int.Parse(item.Substring(0, item.IndexOf("-")));
      //Aqui você faz alguma coisa com o ID recuparado
      MessageBox.Show(id.ToString());
      }
    

     

    Repare no código acima, que eu pego o texto dos itens selecionados no CheckedListBox, e depois para recuperar somente o ID eu busco o que está entre o inicio do texto e o caracter "-" (sinal de menos).

    Atenciosamente


    Se o post foi útil marque como resposta. - Advanced Web Application - MCP - Twitter: @mpghelli
    • Marcado como Resposta JeffersonDF quarta-feira, 24 de novembro de 2010 16:12
    • Editado Marcus Paulo Couto quarta-feira, 24 de novembro de 2010 16:18
    quarta-feira, 24 de novembro de 2010 14:58
  • Outra opção Marcus é ressuscitar a propriedade ItemData do VB6. Para isso é só seguir o artigo do Macoratti(http://www.macoratti.net/vbn_idta.htm).

    Abs.

    Fabiano

    • Editado Fabiano Nalin quarta-feira, 24 de novembro de 2010 15:07 Erro de digitação
    • Marcado como Resposta JeffersonDF quarta-feira, 24 de novembro de 2010 16:12
    quarta-feira, 24 de novembro de 2010 15:06
  • Achei a resposta da minha primeira questao do post anterior: A propriedade existe no framework 3.5 mas nao está no IntelliSense.. Então o esquema eh setar a propriedade na mao intuitivamente e mandar rodar o bixo q vai normal.
    • Marcado como Resposta JeffersonDF quarta-feira, 24 de novembro de 2010 16:12
    quarta-feira, 24 de novembro de 2010 16:12

Todas as Respostas

  • Olá Jefferson, usa o seguinte:

    listTeste.DataSource = DataSet; // ou uma coleção qualquer
    listTeste.DisplayMember = "Nome";
    listTeste.ValueMember = "ID";

    Abs.

    Fabiano

     

    • Marcado como Resposta JeffersonDF quarta-feira, 24 de novembro de 2010 12:40
    • Não Marcado como Resposta JeffersonDF quarta-feira, 24 de novembro de 2010 13:06
    • Sugerido como Resposta Marcus Paulo Couto quarta-feira, 24 de novembro de 2010 14:42
    • Marcado como Resposta JeffersonDF quarta-feira, 24 de novembro de 2010 16:12
    quarta-feira, 24 de novembro de 2010 12:29
  • boa kra!
    quarta-feira, 24 de novembro de 2010 12:40
  • ih fabiano, com o listbox tudo certo funcionou bunitinho, agora o checkedlistbox nao tem datasource nem display member, soh databindings
    quarta-feira, 24 de novembro de 2010 13:00
  • Testei usando o Framework 3.5 e 4 num projeto WindowsForms. Ambos funcionaram. Ex:

    List<dados> colecao;
    colecao = new List<dados>()
    {
      new dados{ID=1,Nome="Fulano"},
      new dados{ID=2,Nome="Ciclano"},
      new dados{ID=3,Nome="Teste"}
    };

    CheckedListBox chkList = new CheckedListBox();
    this.Controls.Add(chkList);

    chkList.DataSource = colecao;
    chkList.DisplayMember = "Nome";
    chkList.ValueMember = "ID";

    chkList.ItemCheck+=delegate
    {
      MessageBox.Show(chkList.SelectedValue.ToString());
    };

    struct dados
    {
      public int ID { get; set; }
      public String Nome { get; set; }
    }

     

    Abs.

    Fabiano

    • Marcado como Resposta JeffersonDF quarta-feira, 24 de novembro de 2010 16:12
    quarta-feira, 24 de novembro de 2010 14:02
  • Olá Jefferson, 

    Um jeito que já fiz para conseguir buscar o valor de um CheckedListBox, foi concatenar o ID com o NOME antes de adicionar no CheckedListBox, exemplo:

    string nome="Teste";
    int id = 1;
    checkedListBox1.Items.Add(id.ToString() + "-" + nome);
    

     

    O resultado no ListBox para este caso seria o seguinte: 1-Nome
    Obviamente você iria adicionar os Items através de um loop em um dataSet por exemplo, mas o mais importante é que depois disso você conseguirá pegar o ID fazendo um tratamento na string do item marcado no checkedListBox:

     

     foreach (string item in checkedListBox1.CheckedItems)
      {
      int id = int.Parse(item.Substring(0, item.IndexOf("-")));
      //Aqui você faz alguma coisa com o ID recuparado
      MessageBox.Show(id.ToString());
      }
    

     

    Repare no código acima, que eu pego o texto dos itens selecionados no CheckedListBox, e depois para recuperar somente o ID eu busco o que está entre o inicio do texto e o caracter "-" (sinal de menos).

    Atenciosamente


    Se o post foi útil marque como resposta. - Advanced Web Application - MCP - Twitter: @mpghelli
    • Marcado como Resposta JeffersonDF quarta-feira, 24 de novembro de 2010 16:12
    • Editado Marcus Paulo Couto quarta-feira, 24 de novembro de 2010 16:18
    quarta-feira, 24 de novembro de 2010 14:58
  • Outra opção Marcus é ressuscitar a propriedade ItemData do VB6. Para isso é só seguir o artigo do Macoratti(http://www.macoratti.net/vbn_idta.htm).

    Abs.

    Fabiano

    • Editado Fabiano Nalin quarta-feira, 24 de novembro de 2010 15:07 Erro de digitação
    • Marcado como Resposta JeffersonDF quarta-feira, 24 de novembro de 2010 16:12
    quarta-feira, 24 de novembro de 2010 15:06
  • corretíssimo Marcus.

    soh tenho 2 observações:

    1 - meu framework eh o 3.5 e nao tem o datasource no checkedlistbox.

    2 - usei uma soluçao parecida com essa que voce usou mas tenho 1 problema: nao posso mostrar o id no checkedlistbox. Tem como deixar escondida aquela parte da string será?

    quarta-feira, 24 de novembro de 2010 15:57
  • Achei a resposta da minha primeira questao do post anterior: A propriedade existe no framework 3.5 mas nao está no IntelliSense.. Então o esquema eh setar a propriedade na mao intuitivamente e mandar rodar o bixo q vai normal.
    • Marcado como Resposta JeffersonDF quarta-feira, 24 de novembro de 2010 16:12
    quarta-feira, 24 de novembro de 2010 16:12
  • Jefferson acredito que não tenha como ocultar o ID usando desta forma, o que você pode fazer é criar uma coleção e quando for resgatar o ID puxar da mesma. Por exemplo:

            private void Form1_Load(object sender, EventArgs e)
            {
                List<dados> colecao;
                colecao = new List<dados>()
                {
                    new dados{ID=1,Nome="Fulano"},
                    new dados{ID=2,Nome="Ciclano"},
                    new dados{ID=3,Nome="Teste"}
                };

                CheckedListBox chkList = new CheckedListBox();
                this.Controls.Add(chkList);

                foreach (var item in colecao)
                {
                    chkList.Items.Add(item.Nome);
                }

                chkList.ItemCheck+=delegate
                {
                    int id = colecao.Where(c=>c.Nome.Equals(chkList.Text)).First().ID;
                    MessageBox.Show(id.ToString());
                };

            }
            struct dados
            {
                public int ID { get; set; }
                public String Nome { get; set; }
            }

    quarta-feira, 24 de novembro de 2010 16:17
  • Pessoal,

    Realmente a solução do Fabiano Nalin Funciona. 

    quarta-feira, 17 de outubro de 2012 19:03