none
Completar textbox com base na opção escolhida numa combobox RRS feed

  • Pergunta

  •  Olá, antes de  tudo estou fazendo uma aplicação em Windows Forms conectado à um banco MySql.

    Tenho uma tabela categoria com os campos "id_categoria", "descricao_categoria", e "unidade categoria".

                                           Tenho um registro (1,                  Eletrônicos,                     UN)

                                           Tenho um registro (2,                Cabos de Rede,                 MT)

        Tenho uma combobox cboCategoria e um textbox txtUnidade. Estou fazendo um método para preencher os dados da cboCategoria com base numa tabela do meu banco, até aí tudo bem, ele preenche perfeitamente a combobox. Eu também quero preencher a textbox com base na categoria selecionada na combobox, então por exemplo, caso eu selecione a Categoria "Cabos de Rede", quero que o valor definido na  textbox txtUnidade seja MT (o mt também tá no banco), porém o textbox fica sempre com o valor UN (do primeiro registro da tabela). Consigo exibir os valores de unidade em outro combobox, mas ele também fica sempre como UN por padrão (preciso de auto preenchimento). Meu problema é atualizar os campos, acho que o método está pegando os valores só do primeiro registro na hora de preencher a unidade, alguém pode me ajudar ?

    Código do método abaixo:

    private void inflaCBOCategoria() { //criar um DataTable DataTable dtTabelas = new DataTable(); try { String conexaoMySQL = "server = localhost; user id = MEUUSUARIO; password = MINHASENHA; database = db_magic_turtle"; MySqlConnection mConn = new MySqlConnection(conexaoMySQL); var command = mConn.CreateCommand(); MySqlDataAdapter descricao = new MySqlDataAdapter("SELECT * from tb_categoria", mConn); // Para preencher o dataTable descricao.Fill(dtTabelas); // Para carregar as informacoes no ComboBox cboCategoria.DataSource = dtTabelas; cboUnidade.DataSource = dtTabelas; cboCategoria.DisplayMember = "descricao_categoria"; // Campo que será exibido para o Usuario cboCategoria.ValueMember = "descricao_categoria"; // Valor que você pode jogar no Textbox object unidade = cboCategoria.SelectedValue; txtUnidade.Text = unidade.ToString(); } catch (Exception ex) { MessageBox.Show("Não foi possível estabelecer uma conexão com o banco de dados. \n Erro: " + ex); } }

    sábado, 14 de outubro de 2017 03:51

Respostas

  • Leonardo,

    Como você já pode constatar, seu código está errado. Se você altera o DataSource do ComboBox e logo em seguida já pega o SelectedValue, ele pegará o primeiro item do mesmo.

    Se você quer alterar o conteúdo do txtUnidade apenas quando o usuário alterar a seleção do ComboBox, você precisa fazer esta forma:

     private void inflaCBOCategoria()
            {
                //criar um DataTable
                DataTable dtTabelas = new DataTable();
    
                try
                {
                    String conexaoMySQL = "server = localhost; user id = MEUUSUARIO; password = MINHASENHA; database = db_magic_turtle";
                    MySqlConnection mConn = new MySqlConnection(conexaoMySQL);
    
                    var command = mConn.CreateCommand();
    
                    MySqlDataAdapter descricao = new MySqlDataAdapter("SELECT * from tb_categoria", mConn);
    
                    // Para preencher o dataTable
                    descricao.Fill(dtTabelas);
    
    
                    // Para carregar as informacoes no ComboBox
                    cboCategoria.DataSource = dtTabelas;
                    cboUnidade.DataSource = dtTabelas;
    
                    cboCategoria.DisplayMember = "descricao_categoria"; // Campo que será exibido para o Usuario
                    cboCategoria.ValueMember = "descricao_categoria";    //  Valor que você pode jogar no Textbox
    
                    
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Não foi possível estabelecer uma conexão com o banco de dados. \n Erro: " + ex);
                }
            }    
    
    // *******
    // Você precisa criar o método para tratar o evento SelectedIndexChanged
    private void cboCategoria_SelectedIndexChanged(object sender, 
    		System.EventArgs e)
    {
    
        txtUnidade.Text = cboCategoria.SelectedValue.ToString();
    }


    Juliano Nunes - http://linkedin.com/in/julianonunes

    Lembre-se de clicar em "Votar como útil" e "Marcar como Resposta" caso tenha respondido sua dúvida.

    Remember to "Vote as Helpful" and "Mark as Answer" if your question has been answered.

    sábado, 14 de outubro de 2017 11:44

Todas as Respostas

  • Leonardo,

    Como você já pode constatar, seu código está errado. Se você altera o DataSource do ComboBox e logo em seguida já pega o SelectedValue, ele pegará o primeiro item do mesmo.

    Se você quer alterar o conteúdo do txtUnidade apenas quando o usuário alterar a seleção do ComboBox, você precisa fazer esta forma:

     private void inflaCBOCategoria()
            {
                //criar um DataTable
                DataTable dtTabelas = new DataTable();
    
                try
                {
                    String conexaoMySQL = "server = localhost; user id = MEUUSUARIO; password = MINHASENHA; database = db_magic_turtle";
                    MySqlConnection mConn = new MySqlConnection(conexaoMySQL);
    
                    var command = mConn.CreateCommand();
    
                    MySqlDataAdapter descricao = new MySqlDataAdapter("SELECT * from tb_categoria", mConn);
    
                    // Para preencher o dataTable
                    descricao.Fill(dtTabelas);
    
    
                    // Para carregar as informacoes no ComboBox
                    cboCategoria.DataSource = dtTabelas;
                    cboUnidade.DataSource = dtTabelas;
    
                    cboCategoria.DisplayMember = "descricao_categoria"; // Campo que será exibido para o Usuario
                    cboCategoria.ValueMember = "descricao_categoria";    //  Valor que você pode jogar no Textbox
    
                    
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Não foi possível estabelecer uma conexão com o banco de dados. \n Erro: " + ex);
                }
            }    
    
    // *******
    // Você precisa criar o método para tratar o evento SelectedIndexChanged
    private void cboCategoria_SelectedIndexChanged(object sender, 
    		System.EventArgs e)
    {
    
        txtUnidade.Text = cboCategoria.SelectedValue.ToString();
    }


    Juliano Nunes - http://linkedin.com/in/julianonunes

    Lembre-se de clicar em "Votar como útil" e "Marcar como Resposta" caso tenha respondido sua dúvida.

    Remember to "Vote as Helpful" and "Mark as Answer" if your question has been answered.

    sábado, 14 de outubro de 2017 11:44
  • Boa tarde,

    Se não houver retorno nessa thread até amanhã, a mesma deverá ser encerrada.

    Atenciosamente,

    Filipe B de Castro

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    terça-feira, 17 de outubro de 2017 17:41
    Moderador
  • Boa tarde,

    Por falta de retorno essa thread está encerrada.

    Se necessário, favor abrir uma nova thread.

    Atenciosamente,


    Filipe B de Castro

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    segunda-feira, 23 de outubro de 2017 17:08
    Moderador