Usuário com melhor resposta
Como obter o ID de um registro em uma tabela a partir de um item do combobox?

Pergunta
-
Amigos,
Gostaria de saber uma maneira elegante de obter um ID de um registro na tabela.
Eu preencho um combobox com o campo descrição dessa tabela, e a partir de um item selecionado no ComboBox, preciso passar o ID do registro como parâmetro para uma tabela filha.
Eu não posso comparar com a descrição, pois podem existir mais de uma descrição iguais...
Tentei de 2 formas nada elegantes:
1-Usando o próprio index do combo, mas logo descartei, pois os registros podem ser deletados, e o index do compo não corresponderia ao index da tabela.
2-Preenchi o combo com ID+Descrição, e a partir da seleção do item do combo eu lia via substring o primeiro caracter, sendo esse o ID. Mas um ID 10 já daria errado, pois eu leria apenas o primeiro dígito.
Alguma sugestão funcional?
Estou usando c# 2008 + LINQ to SQL 2008
Obrigado
Respostas
-
Daniel,
Essa dica será fácil.
Como Popular (02 Exemplos)
-------------------------------------------------------------------------------------------------------------
Todo comboBox e/ou ListBox possui um overload no metodo '.add' para um objeto chamado ListItem. Que é uma composição de <Chave,Valor>.
Exemplo(01) de como popular um combo<Chave, valor>(Usando intervenção manual)://Segue um exemplo de como popular um combo com <chave,valor> ListItem listItemAux = null; //Primeiro registro add no combo listItemAux = new ListItem("NomeDescriçãoExemplo", "ChaveIdExemplo"); seuComboBox.Items.Add(listItemAux); //Segundo registro add no combo listItemAux = new ListItem("NomeDescriçãoExemplo", "ChaveIdExemplo"); seuComboBox.Items.Add(listItemAux);
Exemplo(02) de como Popular um combo de forma automática:seuComboBox.ValueMember = "CampoID"; //Coluna seuComboBox.DisplayMember = "CampoDescricao"; //Coluna seuComboBox.DataSource = seuDataTable; //Fonte de Dados onde as colunas citadas se encontram.
-------------------------------------------------------------------------------------------------------------
Exemplo de como consultar a chave adicionada:seuComboBox.SelectedValue
Tiago Santos
Líder do Grupo de Usuários Atitude Brasil.Net (www.atitudebrasil.net)
MSP, MCP"Atenção: Se este poste foi útil. Não deixe de marcar como tal."
Tiago Novaes (MSP, MCP) - tiago.santos@atitudebrasil.net - http://www.atitudebrasil.net - Blog: http://www.atitudebrasil.net/blogs/tiagosantos- Sugerido como Resposta Tiago Novaes terça-feira, 29 de setembro de 2009 15:57
- Marcado como Resposta Harley AraujoModerator quinta-feira, 1 de outubro de 2009 14:45
-
Você está usando linq certo?
Faça assim
var source = from tab in DBContext.Tabela select new {ID = tab.ID, Descricao = tab.Descricao};
comboBox1.DataSource = source;
comboBox1.DisplayMember = "ID";
comboBox1.ValueMember = "Descricao";- Sugerido como Resposta Murilo Amaru Gomes terça-feira, 29 de setembro de 2009 22:07
- Marcado como Resposta Harley AraujoModerator quinta-feira, 1 de outubro de 2009 14:45
Todas as Respostas
-
-
-
Daniel use o ValueMember, por exemplo o datasource que você passou tem duas colunas:
Nome que você quer mostrar e ID que é o que você quer pegar
faça
comboBox1.ValueMember = "ID";
comboBox1.DisplayMemeber = "Nome";
Ai é só pegar o comboBox1.SelectedValue para pegar o id -
Daniel,
Essa dica será fácil.
Como Popular (02 Exemplos)
-------------------------------------------------------------------------------------------------------------
Todo comboBox e/ou ListBox possui um overload no metodo '.add' para um objeto chamado ListItem. Que é uma composição de <Chave,Valor>.
Exemplo(01) de como popular um combo<Chave, valor>(Usando intervenção manual)://Segue um exemplo de como popular um combo com <chave,valor> ListItem listItemAux = null; //Primeiro registro add no combo listItemAux = new ListItem("NomeDescriçãoExemplo", "ChaveIdExemplo"); seuComboBox.Items.Add(listItemAux); //Segundo registro add no combo listItemAux = new ListItem("NomeDescriçãoExemplo", "ChaveIdExemplo"); seuComboBox.Items.Add(listItemAux);
Exemplo(02) de como Popular um combo de forma automática:seuComboBox.ValueMember = "CampoID"; //Coluna seuComboBox.DisplayMember = "CampoDescricao"; //Coluna seuComboBox.DataSource = seuDataTable; //Fonte de Dados onde as colunas citadas se encontram.
-------------------------------------------------------------------------------------------------------------
Exemplo de como consultar a chave adicionada:seuComboBox.SelectedValue
Tiago Santos
Líder do Grupo de Usuários Atitude Brasil.Net (www.atitudebrasil.net)
MSP, MCP"Atenção: Se este poste foi útil. Não deixe de marcar como tal."
Tiago Novaes (MSP, MCP) - tiago.santos@atitudebrasil.net - http://www.atitudebrasil.net - Blog: http://www.atitudebrasil.net/blogs/tiagosantos- Sugerido como Resposta Tiago Novaes terça-feira, 29 de setembro de 2009 15:57
- Marcado como Resposta Harley AraujoModerator quinta-feira, 1 de outubro de 2009 14:45
-
-
Você está usando linq certo?
Faça assim
var source = from tab in DBContext.Tabela select new {ID = tab.ID, Descricao = tab.Descricao};
comboBox1.DataSource = source;
comboBox1.DisplayMember = "ID";
comboBox1.ValueMember = "Descricao";- Sugerido como Resposta Murilo Amaru Gomes terça-feira, 29 de setembro de 2009 22:07
- Marcado como Resposta Harley AraujoModerator quinta-feira, 1 de outubro de 2009 14:45
-
Obrigado a todos, funcionou corretamente...Tentei com os exemplos do Tiago e do Murilo e funcionaram perfeitamente.Pra quem precisar, juntei os 2 exemplos aí embaixo (com uma correção de inversão de valores, apenas exibição!)
var source = from tab in DBContext.Tabela select new {ID = tab.ID, Descricao = tab.Descricao}; comboBox1.DataSource = source; comboBox1.DisplayMember = "Descricao"; comboBox1.ValueMember = "ID"; Como consultar a chave adicionada: ComboBox.SelectedValue;