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

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!

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();
    }

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

Consegue me mandar ela?

Obrigado por ter respondido.

    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%

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.

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?

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();

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…

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).

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();
            }
        }

UP.
Alguém ajuda?

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.

Outra dúvida, rs…

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

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

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?

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.