Usuário com melhor resposta
guardar id em listbox/checkedlistbox

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?
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
-
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
-
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
-
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
-
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
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
-
-
-
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
-
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
-
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
-
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á?
-
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
-
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; }
} -
Pessoal,
Realmente a solução do Fabiano Nalin Funciona.