Array
(
)

Problemas com chave estrangeira em uma combobox

Matheus
   - 10 jul 2013

Pessoal estou tentando pegar o valor da chave estrangeira que esta na combobox,
estou usando a propriedade SelectedValue me retorna null e da erro de referencia do objeto,
quando eu uso a propriedade selectedIndex o valor vem como zero, nao sei mais o que fazer
se alguém puder me ajudar fico grato!
aqui vai o meu código...
#Código

//Rotina para Inserir
        public void inserirVeiculo(int dia, string mes, int ano, int idOrgao, string tipo, int entrada, int saida)
        {

            try
            {
                objComando = new MySqlCommand();
                objComando.Connection = objConexao;
                objConexao.Open();

  
                
                    //libera os objetos
                    objConexao.Close();

                    objComando.CommandText = "insert into veiculo (dia,mes,ano,idOrgao,tipo,entrada,saida) values (@dia, @mes, @ano, @idOrgao, @tipo, @entrada, @saida)";

                    
                    objComando.Parameters.AddWithValue("@dia", dia);
                    objComando.Parameters.AddWithValue("@mes", mes);
                    objComando.Parameters.AddWithValue("@ano", ano);
                    objComando.Parameters.AddWithValue("@idOrgao", idOrgao);
                    objComando.Parameters.AddWithValue("@tipo", tipo);
                    objComando.Parameters.AddWithValue("@entrada", entrada);
                    objComando.Parameters.AddWithValue("@saida", saida);



                    objConexao.Dispose();
                    objConexao.Open();
                    objComando.ExecuteNonQuery();
                    objConexao.Close();
                    MessageBox.Show("Concluído.", "Cadastro");

                
            }
            catch (Exception)
            {
                MessageBox.Show("Erro no banco de dados");
            }

        }

//Cod behind do form

private void toolStripButton3_Click(object sender, EventArgs e)
        {
           
            objVeiculo.inserirVeiculo(int.Parse(comboBoxDia.Text), comboBoxMes.Text, int.Parse(comboBoxAno.Text), int.Parse(comboBoxOrgao.SelectedValue.ToString()), comboBoxTipo.Text, int.Parse(textboxEntrada.Text), int.Parse(textBoxSaida.Text));
        }

//Código que carrega minha combobox através de um DataTable

MySqlConnection comboBox = new MySqlConnection("Persist Security info=false;" +
                                                         "server=localhost;database=sgv;uid=root;pwd='123098'");

            MySqlDataAdapter sql = new MySqlDataAdapter("select nomeOrgao,idOrgao from orgaoautuador where idOrgao= idOrgao", comboBox);

            DataTable dt = new DataTable();

            sql.Fill(dt);

            try
            {
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    comboBoxOrgao.Items.Add(dt.Rows[i]["nomeOrgao"]);
                }
            }
            catch (MySqlException erro)
            {
                throw erro;

            }
            finally
            {
                comboBox.Close();
            }




Fabiovianna
   - 10 jul 2013

boa noite... percebi no seu código que você fecha a conexão antes de iniciar o select, por isso ele fica null...

delete o objConexao.close(); antes do select... pq a conexão deve ser fechada no fim do código.. e ja está dando close no fim...

abs,

espero ter ajudado!

0
|
0

Matheus
   - 10 jul 2013

Amigo o que vc disse nao solucionou me problema,
quando eu mudo propriedade da comboBox para, cmb.selectedIndex.toString() me retorna zero
se eu ponho selectedValue me retorna null

caso puder me dar outra dica fico grato abraço!

0
|
0

Fabiovianna
   - 11 jul 2013

opa... não pegue pelo index.. pegue o valor pelo cmb.SelectedValue

se o valor do combo for numerico ai vc converte pra int com Convert.ToInt32(cmd.SelectedValue);

abs.

0
|
0

Fabiovianna
   - 11 jul 2013

se der errado isso...inspeciona o elemento com a ferramenta do chrome ou o navegador que estiver usando e veja se tem value o combobox... se não tiver pega pelo SelectedItem.

abs

0
|
0

Matheus
   - 11 jul 2013

Fabiano...

Eu fiz o que você recomendou usei a conversão assim

Convert.Int32(cmb.SelectedValue)

porém me retorna este erro,
Cannot add or update a child row: a foreign key constraint fails (`sgv`.`veiculo`, CONSTRAINT `fkidOrgao` FOREIGN KEY (`idOrgao`) REFERENCES `orgaoautuador` (`idOrgao`))

ele nao está conseguindo pegar o valor da comboBox nao é isso?

fiz tbm pelo SelectedItem, porem ele pega o nome do campo nao o valor
com isso aponta erro de entrad de caracter incorreto, pois meu campo idOgrao é auto_increment
e um inteiro. eu estou desenvolvendo a aplicação em Windows Forms.

Agradeço novamente pela sua atenção, se puder me ajudar novamente fico grato, abração!

0
|
0

Matheus
   - 11 jul 2013

Fabiano consegui solucionar o meu problema,
eu estava esquecendo de recuperar o valor do item selecionado,
e também modifiquei a lógico para carregar meu comboBox.

aqui vai o código solucionado caso alguém precise.
#Código

 //Rotina para carregar a comboBox
        private void PreencheComboBox()
        {
            MySqlConnection comboBox = new MySqlConnection("Persist Security info=false;" +
                                                        "server=localhost;database=sgv;uid=root;pwd='123098'");

            MySqlDataAdapter sql = new MySqlDataAdapter("select idOrgao,nomeOrgao from orgaoautuador order by nomeOrgao", comboBox);

            DataTable dt = new DataTable();



            dt.Columns.Add("idOrgao");
            dt.Columns.Add("nomeOrgao");


            comboBoxOrgao.ValueMember = "idOrgao";
            comboBoxOrgao.DisplayMember = "nomeOrgao";
            sql.Fill(dt);
            comboBoxOrgao.DataSource = dt;
        }


//botao inserir
 private void toolStripButton3_Click(object sender, EventArgs e)
        {   //Estou recuperando o valor passando na comboBox e atribuindo o valor para o campo idSelecionado
            string idSelecionado = comboBoxOrgao.SelectedValue.ToString();

//Usei a propriedade SelectedValue no comboBoxOrgao para apenas pegar o id
            objVeiculo.inserirVeiculo(int.Parse(comboBoxDia.Text), comboBoxMes.Text, int.Parse(comboBoxAno.Text), int.Parse(idSelecionado), comboBoxTipo.Text, int.Parse(textboxEntrada.Text), int.Parse(textBoxSaida.Text));
        }

0
|
0

José
   - 14 out 2013

Como a duvida inicial foi sanada, estou marcando o tópico como concluído.

0
|
0