none
Como obter o ID de um registro em uma tabela a partir de um item do combobox? RRS feed

  • 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
    terça-feira, 29 de setembro de 2009 15:37

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
    terça-feira, 29 de setembro de 2009 15:56
  • 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";
    terça-feira, 29 de setembro de 2009 16:04

Todas as Respostas

  • Cara,
    vc pode fazer o seguinte.
    no combo.value vc insere o ID da descrição
    ao selecionar vc usa vc pega o value do combo onde esta o ID da descrição


    Antonio
    terça-feira, 29 de setembro de 2009 15:45
  • quando vc for preencher o combobox, coloca no value o id
    ai qdo vc precisar jah vai estar lah, supondo q esse id seja unico

    abraço,
    Leonardo B. Moreira - Web Developer .net with asp.net and C# - I know, it is only programming but I like it.
    terça-feira, 29 de setembro de 2009 15:47
  • 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
    terça-feira, 29 de setembro de 2009 15:53
  • 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
    terça-feira, 29 de setembro de 2009 15:56
  • eu faço um select de ID + Descrição, e vou adicionando:
    combo.itens.add(descricao);
    combo.value(ID);

    esta correto isto??

    terça-feira, 29 de setembro de 2009 15:57
  • 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";
    terça-feira, 29 de setembro de 2009 16:04
  • 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;
    terça-feira, 29 de setembro de 2009 17:49