none
ComboBox + MySQL ( Problema para puxar informações do banco de dados) RRS feed

  • Pergunta

  • Olá pessoal, muito obrigado por lerem minha dúvida.

    Estou com o seguinte problema.
    Eu tenho no banco de dados por exemplo as tabelas: 

    ID
    Nome
    Empresa

    E no projeto no C# gostaria que em um combobox listasse todas as empresas e na frente ficasse o nome.
    Atualmente puxar somente a empresa eu consigo com o seguinte código:

                DataTable dtTabelas = new DataTable();
                //definir a string de conexao
                String strConn = "Server=127.0.0.1;Database=dcori;Uid=root;Pwd=vertrigo;";
                
               
                MySqlConnection conn = new MySqlConnection(strConn);
    
              
                MySqlDataAdapter da = new MySqlDataAdapter("select * from tbl_pedidos", conn);
    
              
                da.Fill(dtTabelas);
                //carrega as informacoes no combo
                comboBox8.DataSource = dtTabelas;
                comboBox8.DisplayMember = "empresa";
                comboBox8.ValueMember = "empresa";

    Porém gostaria como falei pegar empresa + nome.
    Se eu colocar assim:

    comboBox8.DisplayMember = "empresa AND nome";
                comboBox8.ValueMember = "empresa AND nome";
    Recebo o erro: 

    Cannot bind to the new display member.
    Parameter name: newDisplayMember

    Alguém sabe como resolver isso? Novamente obrigado a todos!
    terça-feira, 23 de junho de 2015 22:04

Respostas

  • Existe sim uma solucao pra o teu problema, o teu select esta errado faz assim:

    MySqlDataAdapter da = new MySqlDataAdapter("select id,(empresa + ' ' + Nome) AS Name from tbl_pedidos", conn);

    comboBox8.DisplayMember = "Name";
                comboBox8.ValueMember = "id";

    Vai mostar empresa e nome 


    A flower cannot blossom without sunshine, and man cannot live without love.

    quinta-feira, 25 de junho de 2015 16:44
    Moderador

Todas as Respostas

  • Já tentou por virgula?

    comboBox8.DisplayMember = "empresa, nome";
    comboBox8.ValueMember = "empresa, nome";
    Uma dica: como vc faz consulta ao banco, e pra eventual ganho de desempenho, ao fazer select, nunca coloque * e sim desta forma: select nome, empresa from tbl_pedidos.

    terça-feira, 23 de junho de 2015 22:54
  • A questão do ganho de desempenho entendi.

    Porém com virgula apresenta o mesmo erro.
    terça-feira, 23 de junho de 2015 23:15
  • Pq não fazer um em cada comboBox?
    terça-feira, 23 de junho de 2015 23:58
  • Amigo porque eu preciso que seja listado tudo porque por exemplo.

    Eu quero que exiba o nome e empresa.
    Assim quando o cara for seleciona ele vai saber que é o nome X e a empresa Y.
    Porque as vezes só pelo nome ou só pela empresa o usuário não sabe qual selecionar.

    Na verdade eu vou por até mais.
    Nome, Empresa e outros campos, falei só dois para simplificar a dúvida.
    quarta-feira, 24 de junho de 2015 00:04
  • Uma solução para o seu problema seria fazer um autopostback.

    Ao clicar no nome carrega o comboBox com o nome da empresa do respectivo nome.

    Isso se tiver fazendo em webform.

    quarta-feira, 24 de junho de 2015 00:26
  • Olá Bruno, DisplayMember é a propriedade usada para "avisar" o combobox de qual propriedade do DataSource ele vai exibir, sendo assim não tem como você "juntar" duas propriedades e mostrar ambas.

    Para resolver este problema, você pode fazer de três maneiras.

    1) Você poderia criar uma coluna a mais nessa tabela que junta as duas informações, não acho muito viável esta solução, pois você vai estar duplicando informações no banco de dados.

    2) Em vez de setar o DataSource do Combobox você pode inserir os valores manualmente através da sua consulta, assim você consegue concatenar as duas informações e adicionar ela no combobox.

    3) Você pode criar objetos com as propriedades semelhantes a que você tem nessa sua tabela, um pequeno exemplo abaixo.

    public class Cliente
        {
            public int ID { get; set; }
    
            public string Nome { get; set; }
    
            public string Empresa { get; set; }
    
            public string NomeConcatenadaComEmpresa
            {
                get
                {
                    return string.Format("{0}-{1}", Nome, Empresa);
                }
    
            }
        }
    Sendo assim, cada linha do resultado do select você criaria um objeto do tipo "Cliente" e armazenaria esse objeto em uma lista, após isso você poderia setar o DataSource do Combobox com esta lista criada, e usar o "NomeConcatenadaComEmpresa" como DisplayMember.

    Eu não manjo muito de banco de dados, mas tu poderia dar uma pesquisada se não tem como juntar essas duas informações e dar um "nome" para ela no próprio select, caso seja possível isso, você pode continuar setando o DataSource e usar esse "nome" como DisplayMember.



    quarta-feira, 24 de junho de 2015 01:01
  • Existe sim uma solucao pra o teu problema, o teu select esta errado faz assim:

    MySqlDataAdapter da = new MySqlDataAdapter("select id,(empresa + ' ' + Nome) AS Name from tbl_pedidos", conn);

    comboBox8.DisplayMember = "Name";
                comboBox8.ValueMember = "id";

    Vai mostar empresa e nome 


    A flower cannot blossom without sunshine, and man cannot live without love.

    quinta-feira, 25 de junho de 2015 16:44
    Moderador