Selecionar um registro pelo ComboBox e preencher outros textbox relacionado a seleção do ComboBox

15 respostas
H

Galera, bom dia!

Estou tendo dificuldades pra fazer essa função em meu sistema, acredito eu que a lógica está OK mas como fazer a função no SelectedIndexChanged está bem errada.

Em meu ComboBox já consigo listar o que está cadastrado em meu banco de dados:

C#
Java
Python

Quando eu clicar na opção C# eu quero que o valor relacionado a C# que eu tenho cadastrado no meu banco de dados “Servico” seja setado no TextBox valor. Entenderam? E a mesma coisa pros outros serviços que eu venha cadastrar futuramente no sistema.

Segue os códigos:

public List<Servicos> ListarServicoComboBoxRelacionado()
        {
            try
            {
                AbrirConexao();
                Servicos servico = new Servicos();
                cmd = new SqlCommand("SELECT * FROM Servicos WHERE servico = @servico", con);
                cmd.Parameters.AddWithValue("@servico", servico.Servico);
                dr = cmd.ExecuteReader();

                List<Servicos> addServico = new List<Servicos>();

                while(dr.Read())
                {
                    
                    servico.Servico = Convert.ToString(dr["servico"]);
                    servico.Valor = Convert.ToDecimal(dr["valor"]);

                    addServico.Add(servico);
                }

                return addServico;
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
            finally
            {
                FecharConexao();
            }
        }

E no evento de SelectedIndexChanged (acredito que seja essa a ação) não consigo implementar.

Poderiam me ajudar, pessoal?
Obrigado!

15 Respostas

aeciocleysson

Da uma olhada nesse código, eu fiz um sistema que quando seleciona o combobox ele me mostrava em uma label o código do fornecedor.

private void Combo()
    {
        try
        {
            ClasseBLL bll = new ClasseBLL();
        
            
            cbEmpresa.DataSource = bll.ListaEmpresaComboDal();

            cbEmpresa.DisplayMember = "idEmpresa";
            cbEmpresa.ValueMember = "nome";
            
          }
        catch (Exception erro)
        {

            throw erro;
        }
    }



  private void cbEmpresa_SelectedIndexChanged(object sender, EventArgs e)
    {
        lblEmpresa.Text = cbEmpresa.SelectedValue.ToString();
    }
H

Mas como está a função “ListaEmpresaComboDal();”

Consegue me mandar ela?

Obrigado por ter respondido.

aeciocleysson
public DataTable ListaEmpresa()
    {
        try
        {
            conexao = new MySqlConnection(conecta);
            comando = new MySqlCommand("SELECT * FROM empresa", conexao);

            MySqlDataAdapter Da = new MySqlDataAdapter();
            Da.SelectCommand = comando;

            DataTable Dt = new DataTable();

            Da.Fill(Dt);

            return Dt;
        }
        catch(Exception erro)
        {
            throw erro;
        }
    }

// MÉTODO PARA LISTAR AS EMPRESAS NO COMBO BOX

public DataTable ListaEmpresaComboDal()
    {
        try
        {
            dal = new ClasseDAL();

            DataTable Dt = new DataTable();

            Dt = dal.ListaEmpresa();

            return Dt;
        }
        catch (Exception erro)
        {
            throw erro;
        }
    }

se quiser de uma olhada no projeto esta no github, tem algumas coisas pra corrigir mas esta funcionando 100%

H

Então amigo, eu consigo popular o meu ComboBox com o que está no banco.
Só preciso relacionar as coisas.

C# está cadastrado numa coluna com valor 35,00.
Java 60,00

Quando eu clicar em C# eu quero que o textbox Valor receba o valor 35,00.

H

Fiz algumas alterações mas não sei se está correto.

public bool ListarServicoComboBoxRelacionado(string servico, decimal valor)
        {
            try
            {
                AbrirConexao();
                cmd = new SqlCommand("SELECT * FROM Servicos WHERE servico = @servico", con);
                cmd.Parameters.AddWithValue("@servico", servico);
                dr = cmd.ExecuteReader();

                if (dr.Read())
                {
                    servico = Convert.ToString(dr["servico"]);
                    valor = Convert.ToDecimal(dr["valor"]);
                }
                else
                {
                    return false;
                }

                return true;
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
            finally
            {
                FecharConexao();
            }
        }

SelectedIndexChanged

private void cbServico_SelectedIndexChanged(object sender, EventArgs e)
        {
            decimal vlr = Convert.ToDecimal(tbValor.Text);**//Erro gerado:A cadeia de caracteres de entrada não estava em um formato correto.**
            string srv = cbServico.SelectedItem.ToString();
            Persistencia acao = new Persistencia();
            Servicos servico = new Servicos();
            acao.ListarServicoComboBoxRelacionado(srv,vlr);
        }

Alguém me dá uma luz?

aeciocleysson

então agora no seu combobox r você vai criar o evento SelecteIndexChanged igual o que te mandei

private void cbEmpresa_SelectedIndexChanged(object sender, EventArgs e)
{
    lblEmpresa.Text = cbEmpresa.SelectedValue.ToString();
}

seuTextbox.Text = seuComboBox.SelectedValue.ToString();

H

Eu fazendo isto ele vai simplesmente copiar o texto que está no combobox pro outro textbox.
Eu não quero isso… eu quero que ele pegue o valor que é do texto C#, do texto Java e etc…

H

Só encontro tutoriais na internet ensinando dessa maneira:

SqlConnection con = new SqlConnection(@"Data Source=.\sqlexpress;Initial Catalog=SysDB;User ID=sa;Password=123456");
            con.Open();
            string sql = "SELECT * FROM Servicos WHERE servico = '"+cbServico.Text+"'";
            SqlCommand cmd = new SqlCommand(sql, con);
            SqlDataReader dr = cmd.ExecuteReader();

            try
            {
                
                while (dr.Read())
                {
                    string comboB = dr["servico"].ToString();
                    decimal valor = Convert.ToDecimal(dr["valor"].ToString());

                    tbValor.Text = valor.ToString();
                }
            }
            catch (Exception)
            {
                
                throw;
            }

Mas acontece que tudo que estou fazendo, estou criando um classes separadas… em MVC, ficaria muito feio eu fazer dessa forma.

Preciso fazer a lógica em uma classe e popular ela na minha View (na ação do botão).

H
public List<Servicos> ListarServicoComboBoxRelacionado()
        {
            try
            {
                AbrirConexao();
                Servicos servico = new Servicos();
                cmd = new SqlCommand("SELECT * FROM Servicos WHERE id = @id", con);
                cmd.Parameters.AddWithValue("@id", servico.Id);
                dr = cmd.ExecuteReader();

                List<Servicos> addServico = new List<Servicos>();
 **//Não consegue ler os parametros... o breakpoint para aqui.**
**                if (dr.Read())**
                {
                    
                    servico.Servico = Convert.ToInt32(dr["id"]).ToString();
                    servico.Valor = Convert.ToDecimal(dr["valor"]);
                    addServico.Add(servico);
                }
                else
                {
                    MessageBox.Show("Nao deu");
                }

                return addServico;
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
            finally
            {
                FecharConexao();
            }
        }
H

UP.
Alguém ajuda?

H

Consegui cara. Ajudou demais!

Agora que fiz as coisas que mandou…

Só corrigindo uma coisa (talvez eu possa estar errado)…

Não há necessidade do ListaEmpresaComboDal() pois ListaEmpresa() já tem o DataTable populado. Correto?

Obrigado.

H

Outra dúvida, rs…

E se eu quisesse popular mais textbox de acordo com a seleção do ComboBox?

aeciocleysson

que bom que deu certo cara, esse código meu tem algumas coisas que devo corrigir, um deles esse método que você mencionou.

H

Deu certo! Você é o cara hahahaha. Eu tava ficando sem cabelo (mais) hahahaha.

Você sabe me dizer como eu conseguiria puxar mais informações e colocar em outros textboxs?

aeciocleysson

eu também quebrei a cabeça com isso kkkk.
é só você seguir a mesma lógica, só vai acrescentar na sua consulta sql o que você quer que apareça e os textbox que você quer exibir o resultado.

Criado 20 de agosto de 2017
Ultima resposta 21 de ago. de 2017
Respostas 15
Participantes 2