none
Salvar id de comboBox RRS feed

  • Pergunta

  • Boa tarde, eu estou tentando fazer com que uma combo box preenchida com os nomes dos fornecedores da tabela de fornecedores , quando for selecionada ela insera o valor selecionado na tabela de produtos 
     sendo que na tabela de produtos sera selecionado o id do forencedor que foi selecionado na combo box. 
    esse metodo e o que preenche a combo


            public void combo()
            {   
                //Connection con1 = new Connection();
                //string strSql = "SELECT NOMe_FORNECEDOR from FORNECEDORES where id_FORNECEDOR = id_FORNECEDOR";
                //SqlCommand cmd = new SqlCommand(strSql, con1.cone());

                string valorDocombo = cbFORNEECEDORES.SelectedIndex.ToString();
                Connection con1 = new Connection();
                string strSql = "insert into PRODUTOS (fk_id_FORNECEDORES) values ("+valorDocombo+")";
                SqlCommand cmd = new SqlCommand(strSql, con1.cone());
                cmd.ExecuteNonQuery();



            }

            private void button1_Click(object sender, EventArgs e)
            {
                selecionarcombo();
            }

    esse aqui e o que iria inserir os dados na tabela :

     private void salvar_Click(object sender, EventArgs e)
            {
            //    string valorDocombo = cbFORNECEDORES.SelectedIndex.ToString();
                Connection con1 = new Connection();
                string strSql = "insert into PRODUTO (nome_PTODUTO,fk_id_FORNECEDOR,tipo_PRODUTO)values(@nome_PTODUTO,@fk_id_FORNECEDOR,@tipo_PRODUTO)";
             //   string strSql2 = "insert into PRODUTO (fk_id_FORNECEDOR) values (" + valorDocombo + ")";
                SqlCommand cmd = new SqlCommand(strSql, con1.cone());
          //      SqlCommand cmd2 = new SqlCommand(strSql2, con1.cone());

                cmd.Parameters.Add("@nome_PTODUTO", SqlDbType.VarChar).Value = textBox1.Text;
                cmd.Parameters.Add("@fk_id_FORNECEDOR", SqlDbType.Int).Value = cbFORNECEDORES.Text;
                cmd.Parameters.Add("@tipo_PRODUTO", SqlDbType.VarChar).Value = textBox3.Text;
              

                try
                {
                   
                    //   con1.cone().Open();
                    cmd.ExecuteNonQuery();
                 //   cmd2.ExecuteNonQuery();
                    MessageBox.Show("Salvo com sucesso!");

                }
                catch (Exception ex)
                {

                    throw;
                }

                finally
                {
               
                    textBox1.Clear();
                    textBox2.Clear();
                    textBox3.Clear();
                    maskedTextBox1.Clear();
                    textBox5.Clear();
                    textBox1.Focus();
                    con1.cone().Close();

    Como sou nova nisso alguem poderia me ajudar a saber como se faz isso?Por favor!
    segunda-feira, 12 de junho de 2017 17:39

Respostas

Todas as Respostas

  • Boa tarde,

     Onde você carrega os dados na combo ?

    segunda-feira, 12 de junho de 2017 17:45
  •   public void CARREGA()
            {
                Connection con1 = new Connection();
                string strSql = "SELECT Nome_fornecedor from fornecedores where id_fornecedor = id_fornecedor";
                SqlCommand cmd = new SqlCommand(strSql, con1.cone());
                //   con1.cone().Open();
                SqlDataReader dr = cmd.ExecuteReader();
                DataTable dt = new DataTable();
                dt.Load(dr);
                cbSoftware.ValueMember = "id_fornecedor";
                cbSoftware.DisplayMember = "Nome_fornecedor";
                cbSoftware.DataSource = dt;

            }

    To carregando assim.

    • Editado Felipe1520 segunda-feira, 12 de junho de 2017 17:48
    segunda-feira, 12 de junho de 2017 17:47
  • Então,

     pra ler o id do seu fornecedor seria assim:

    string valorCombo = Convert.ToString(cboSoftware.SelectedValue);

      Agora levando em consideracao que o campo "id_fornecedor" seja um int seria assim:

    int valorCombo = (int)cboSoftware.SelectedValue;
     Faça os testes...

     

    segunda-feira, 12 de junho de 2017 18:53
  • oi daniel, fiz a conversao para inteiro . mas agora aparece a mensagem :specified cast is not valid.
    int valorCombo = (int)cboSoftware.SelectedValue;
    segunda-feira, 12 de junho de 2017 19:11
  • oi daniel, fiz a conversao para inteiro . mas agora aparece a mensagem :specified cast is not valid.
    int valorCombo = (int)cboSoftware.SelectedValue;

     Provavel que o campo cbSoftware.ValueMember = "id_fornecedor" não seja um int, tente converter:

    int valorCombo = Convert.ToInt32(cboSoftware.SelectedValue);

    segunda-feira, 12 de junho de 2017 19:13
  • Tente dessa forma Nathy

    int valorCombo = int.Parse(cboSoftware.SelectedValue);

    segunda-feira, 12 de junho de 2017 19:13
  • Tb nao deu certo :/
    segunda-feira, 12 de junho de 2017 19:31
  • Nathy eu dei uma verificada, e este erro pode estar acontecendo por causa das informações no banco de dados.

    Verifique se o id_fornecedor não esta vindo nulo. Coloque um breakpoint para acompanhar. 

    Em qual evento você está pegando o id? 

    segunda-feira, 12 de junho de 2017 19:35
  • Entao como eu sou bem nova nisso eu nao entendo muito, eu fiz tudo no botao de salvar acho q e o evento click
    segunda-feira, 12 de junho de 2017 19:42
  • Nathy verificando o seu select, vi que está faltando o id, coloca ele

    ele está assim:

      string strSql = "SELECT Nome_fornecedor from fornecedores where id_fornecedor = id_fornecedor";

    coloca o id:

      string strSql = "SELECT nomecampoid, Nome_fornecedor from fornecedores where id_fornecedor = id_fornecedor";

    segunda-feira, 12 de junho de 2017 19:44
  • Oi mariana, entao ele ta ate populando a combo que eu fiz nesse metodo :

    public void CARREGA()
            {
                Connection con1 = new Connection();
                string strSql = "SELECT id_fornecedor, Nome_fornecedor from fornecedores where id_fornecedor = id_fornecedor";
                SqlCommand cmd = new SqlCommand(strSql, con1.cone());
                //   con1.cone().Open();
                SqlDataReader dr = cmd.ExecuteReader();
                DataTable dt = new DataTable();
                dt.Load(dr);
                cbSoftware.ValueMember = "id_fornecedor";
                cbSoftware.DisplayMember = "Nome_fornecedor";
                cbSoftware.DataSource = dt;
            }

    Só que no salvar que é outro método que eu fiz , eu nao sei como fazer pra inserir r oq ue a pessoa selecionar na tabela produto.

    private void salvar_Click(object sender, EventArgs e)
            {
            //    string valorDocombo = cbFORNECEDORES.SelectedIndex.ToString();
                Connection con1 = new Connection();
                string strSql = "insert into PRODUTO (nome_PTODUTO,fk_id_FORNECEDOR,tipo_PRODUTO)values(@nome_PTODUTO,@fk_id_FORNECEDOR,@tipo_PRODUTO)";
             //   string strSql2 = "insert into PRODUTO (fk_id_FORNECEDOR) values (" + valorDocombo + ")";
                SqlCommand cmd = new SqlCommand(strSql, con1.cone());
          //      SqlCommand cmd2 = new SqlCommand(strSql2, con1.cone());

                cmd.Parameters.Add("@nome_PTODUTO", SqlDbType.VarChar).Value = textBox1.Text;
                cmd.Parameters.Add("@fk_id_FORNECEDOR", SqlDbType.Int).Value = cbFORNECEDORES.Text;
                cmd.Parameters.Add("@tipo_PRODUTO", SqlDbType.VarChar).Value = textBox3.Text;
              

                try
                {
                   
                    //   con1.cone().Open();
                    cmd.ExecuteNonQuery();
                 //   cmd2.ExecuteNonQuery();
                    MessageBox.Show("Salvo com sucesso!");

                }
                catch (Exception ex)
                {

                    throw;
                }

                finally
                {
               
                    textBox1.Clear();
                    textBox2.Clear();
                    textBox3.Clear();
                    maskedTextBox1.Clear();
                    textBox5.Clear();
                    textBox1.Focus();
                    con1.cone().Close();

    Se vc puder me dr uma luz eu agradeço muitao.



    • Editado Felipe1520 segunda-feira, 12 de junho de 2017 19:53
    segunda-feira, 12 de junho de 2017 19:51
  • Nathy no combobox está aparecendo os fornecedores corretamente ?

    Em qual parte está dando o erro no código ?

    segunda-feira, 12 de junho de 2017 19:54
  • Sim aparece os fornecedores direitinho!

    Da problema na hora de fazer o insert no banco. Pq nao sei , se estou fazendo errado. Pq eu tenho que inserir esse valor da combo que é ta bela fornecedores na tabela produtos sendo que na tabela de produtos esse nome do fornecedor que a pessoa selecionar ela é uma chave estrangeira que contem o id do fornecedor, resumindo na tabela produtos gravo nome do produto , o iddo fornecedor (que o usuario selecionou) e o tipo de produto.

    Porém acredito que estou fazendo o método de inserir no banco errado ou esta faltando algo que nao sei oque é.

    Quando coloco p rodar da um erro agora dizendo que ha um erro de conversao do paramentro de string para int32.

    segunda-feira, 12 de junho de 2017 20:00
  • O erro aparece exatamente em qual linha ?

    cmd.Parameters.Add("@fk_id_FORNECEDOR", SqlDbType.Int).Value = cbFORNECEDORES.Text;

    Nesta linha por exemplo, vc ta convertendo para int, porém o campo é text, se for o id mesmo que você precisa ai você tem que colocar 

    int.Parse(cbFORNECEDORES.SelectedValue);


    segunda-feira, 12 de junho de 2017 20:03
  • Mas ai como fica? essa conversao se coloca na mesma linha?

    cmd.Parameters.Add("@fk_id_FORNECEDOR", SqlDbType.Int).Value = cbFORNECEDORES.Text;

    segunda-feira, 12 de junho de 2017 20:06
  • Tenta desta forma:

    cmd.Parameters.Add("@fk_id_FORNECEDOR", SqlDbType.Int).Value = cbFORNECEDORES.SelectedValue;

    • Marcado como Resposta Felipe1520 segunda-feira, 12 de junho de 2017 20:15
    • Não Marcado como Resposta Felipe1520 segunda-feira, 12 de junho de 2017 20:15
    • Sugerido como Resposta Mariana C. Costa terça-feira, 13 de junho de 2017 11:37
    • Marcado como Resposta Guilherme Macedo SModerator segunda-feira, 19 de junho de 2017 13:10
    segunda-feira, 12 de junho de 2017 20:08
  • Muito obrigada Mariana, Deu certo!! 
    • Editado Felipe1520 segunda-feira, 12 de junho de 2017 20:21
    segunda-feira, 12 de junho de 2017 20:16
  • Se a resposta lhe ajudou, marque como resposta.

    Que bom que resolveu.

    terça-feira, 13 de junho de 2017 17:23