none
Como salvar dados de um data grid view no banco de dados? RRS feed

  • Pergunta

  • Pessoal como salvar dados de um grid em um banco de dados, sabendo-se que o grid tem mais de uma linha?

    Tentei com o código abaixo, porém ele só salva a primeira linha do grid

    int posicao = 0;
                        foreach (DataGridViewRow linha in TabelaVendas.Rows)
                        {
                            posicao = linha.Index;
                                string strPreco = TabelaVendas.Rows[posicao].Cells[4].Value.ToString();
                                strPreco = strPreco.Replace("R", "");
                                strPreco = strPreco.Replace("$", "");
                                strPreco = strPreco.Replace(" ", "");
                                strPreco = strPreco.Replace(".", "");
                                string strDesconto = TabelaVendas.Rows[posicao].Cells[5].Value.ToString();
                                strDesconto = strDesconto.Replace("R", "");
                                strDesconto = strDesconto.Replace("$", "");
                                strDesconto = strDesconto.Replace(" ", "");
                                strDesconto = strDesconto.Replace(".", "");
                                string strTotal = TabelaVendas.Rows[posicao].Cells[6].Value.ToString();
                                strTotal = strTotal.Replace("R", "");
                                strTotal = strTotal.Replace("$", "");
                                strTotal = strTotal.Replace(" ", "");
                                strTotal = strTotal.Replace(".", "");
                                System.Globalization.DateTimeFormatInfo DataBr = new System.Globalization.DateTimeFormatInfo();
                                DataBr.ShortDatePattern = "dd/MM/yyyy";
                                DateTime Data = Convert.ToDateTime(TabelaVendas.Rows[posicao].Cells[0].Value.ToString(), DataBr);
                                string Conexao;
                                Conexao = ConfigurationManager.ConnectionStrings["AcademiaConnectionString"].ConnectionString;
                                SqlConnection sqlConexao = new SqlConnection(Conexao);
                                SqlCommand cmd = new SqlCommand("insert into Venda_Balcao (Produto, QTDE, P_Unit, P_Total, Data, Desconto, Funcionario) values" +
                                "(@Produto, @Qtde, @PrecoUni, @PrecoTotal, @Data, @Desconto, @Funcionario)", sqlConexao);
                                cmd.Parameters.AddWithValue("@Data", Data);
                                cmd.Parameters.AddWithValue("@Produto", TabelaVendas.Rows[posicao].Cells[1].Value.ToString());
                                cmd.Parameters.AddWithValue("@Qtde", Convert.ToInt32(TabelaVendas.Rows[posicao].Cells[3].Value));
                                cmd.Parameters.AddWithValue("@PrecoUni", Convert.ToDecimal(strPreco));
                                cmd.Parameters.AddWithValue("@Desconto", Convert.ToDecimal(strDesconto));
                                cmd.Parameters.AddWithValue("@PrecoTotal", Convert.ToDecimal(strTotal));
                                cmd.Parameters.AddWithValue("@Funcionario", Usuario);
                                AtualizaEstoque(TabelaVendas.Rows[posicao].Cells[1].Value.ToString(), Convert.ToInt32(TabelaVendas.Rows[posicao].Cells[3].Value));
                                sqlConexao.Open();
                                cmd.ExecuteNonQuery();
                                sqlConexao.Close();
                                lbTotal.Text = "R$ 0,00";
                                TabelaVendas.Rows.Clear();
                                MessageBox.Show("Venda(s) realizada(s) com sucesso!", "Informação!", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        }

    Espero que possam me ajudar! 

    Muitos Obrigado e um Grande Abraço a Todos!

    quinta-feira, 19 de setembro de 2013 03:33

Respostas

Todas as Respostas

  • Em vez de TabelaVendas.Rows[posicao] troque por "linha".

    Exemplo:

    string strPreco =linha.Cells[4].Value.ToString();


    João Antonio Marques

    quinta-feira, 19 de setembro de 2013 11:15
  • Msm assim amigo, continua salvando apenas a primeira linha!
    quinta-feira, 19 de setembro de 2013 11:39
  • Iam, poste o código do seu método AtualizaEstoque() por favor. 

    Abraço.


    Good Luck, Fernando Mamprin

    quinta-feira, 19 de setembro de 2013 11:48
  • using (SqlConnection scn = new SqlConnection(clspublic.GetConnectionString()))
        {
    
            foreach (GridViewRow GVRow in GridView1.Rows)
            {
                Name = GVRow.Cells[1].Text;
                CarType = GVRow.Cells[2].Text;
                TechnicalNo = GVRow.Cells[3].Text;
                ProductionDate = GVRow.Cells[4].Text;
                EngaineType = GVRow.Cells[5].Text;
                NoInStock = GVRow.Cells[6].Text;
                NoForCar = GVRow.Cells[7].Text;
                Price = GVRow.Cells[8].Text;
                Image = GVRow.Cells[9].Text;
                Desc = GVRow.Cells[10].Text;
                PartType = GVRow.Cells[11].Text;
                Level = GVRow.Cells[12].Text;
                Unit = GVRow.Cells[13].Text;
                Ratio = GVRow.Cells[14].Text;
                Dirham = GVRow.Cells[15].Text;
                ExtraMoney = GVRow.Cells[16].Text;
    
                using (SqlCommand scm = scn.CreateCommand())
                {
    
                    scm.CommandText = @"INSERT INTO tblProduct
                  (fName, fxCarType, fProductionDate, fEngineType, fNoinStock, fNoforCar, fPrice,fRatio,fDirham,fExtraMoney, fImage, fDesc, fxPartType, fxLevel,fUnitType,fTechnicalNo)
       VALUES     (@fName,@fxCarType,@fProductionDate,@fEngineType,@fNoinStock,@fNoforCar,@fPrice,@fRatio,@fDirham,@fExtraMoney,@fImage,@fDesc,@fxPartType,@fxLevel,@fUnitType,@fTechnicalNo)";
    
                    scm.Parameters.AddWithValue("@fName", Name.ToString());
                    scm.Parameters.AddWithValue("@fxCarType", CarType.ToString());
                    scm.Parameters.AddWithValue("@fTechnicalNo", TechnicalNo.ToString());
                    scm.Parameters.AddWithValue("@fProductionDate", ProductionDate.ToString());
                    scm.Parameters.AddWithValue("@fEngineType", EngaineType.ToString());
                    scm.Parameters.AddWithValue("@fNoinStock", NoInStock.ToString());
                    scm.Parameters.AddWithValue("@fNoforCar", NoForCar.ToString());
                    scm.Parameters.AddWithValue("@fPrice", Price.ToString());
                    scm.Parameters.AddWithValue("@fRatio", Ratio.ToString());
                    scm.Parameters.AddWithValue("@fDirham", Dirham.ToString());
                    scm.Parameters.AddWithValue("@fExtraMoney", ExtraMoney.ToString());
                    scm.Parameters.AddWithValue("@fImage", Image.ToString());
                    scm.Parameters.AddWithValue("@fDesc", Desc.ToString());
                    scm.Parameters.AddWithValue("@fxPartType", PartType.ToString());
                    scm.Parameters.AddWithValue("@fUnitType", Unit.ToString());
                    scm.Parameters.AddWithValue("@fxLevel", Level.ToString());
    
                    scm.ExecuteNonQuery();
                }
            }
        }


    quinta-feira, 19 de setembro de 2013 11:48
  • private void AtualizaEstoque(string ID_do_Produto, int QuantidadeVendida)
            {
                BuscaEstoque(ID_do_Produto);
                string Conexao;
                Estoque = Estoque - QuantidadeVendida;
                Conexao = ConfigurationManager.ConnectionStrings["AcademiaConnectionString"].ConnectionString;
                SqlConnection sqlConexao = new SqlConnection(Conexao);
                SqlCommand cmd = new SqlCommand("UPDATE Produtos SET Estoque_Atual = @Estoque_Atual WHERE ID = @ID", sqlConexao);
                cmd.Parameters.AddWithValue("@ID", ID_do_Produto);
                cmd.Parameters.AddWithValue("@Estoque_Atual", Estoque);
                try
                {
                    sqlConexao.Open();
                    cmd.ExecuteNonQuery();
                    sqlConexao.Close();
                }
                catch (Exception erro)
                {
                    throw erro;
                }
            }
    Ai esta o codigo do meu metodo atualiza estoque!
    quinta-feira, 19 de setembro de 2013 12:15
  • Iam, tente tirar esse trecho de código. 

    TabelaVendas.Rows.Clear();

    Quando você dá um Clear() ele limpa as linhas, se você debugar provavelmente verá que ele não irá entrar novamente no seu foreach. 

    Espero ter ajudado. 

    Abraço.


    Good Luck, Fernando Mamprin

    quinta-feira, 19 de setembro de 2013 12:24
  • Já consegui resolver pessoal, era apenas um erro de logico que cometi! Abraços e obrigado aqueles que se prontificaram!
    • Marcado como Resposta Giovani Cr sexta-feira, 20 de setembro de 2013 15:06
    quinta-feira, 19 de setembro de 2013 12:37
  • Finalize a thread meu caro, contribua para os que te ajudaram.

    Se for util marque...

    quinta-feira, 19 de setembro de 2013 13:10
  • Sei que já resolveu sua questão, mais fica ai um post do meu blog onde faço esta rotina, pode ser que ajude alguém!

    E assim que possível finalize a Thread, ajuda a organizar o Fórum!


    Pablo Batista Cardoso



    quinta-feira, 19 de setembro de 2013 13:55
  • eu uso um foreach, mas você pode usar o for com um count,

    for (int i = 0; i < seugrid.Rows.Count; i++)

    {

    código aqui.

    }


    sexta-feira, 20 de setembro de 2013 12:25
  •   Ola Ian, cara é o seguinte estou com um problema com muito parecido mas estou meu acesso a dados nao necessito criar um DataSource e nem criar string de conexao pois estou trabalhando com EntityFramework.

      É o seguinte cara tambem tenho um gridView e tenho que pegar uns valores la tambem e tem um valor que esta no rodape, nem faço ideia cara como fazer isso teria como entrar em contato comigo, pois ja estou procurando um programador so para arrumar isso cara sou novo no ASP, e nao estou entendendo como devo fazer para salvar no banco.

      Por favor entre em contato comigo te passo o codigo certinho pra voce entender, acredito que nao seja nada complicado para quem ja

    trabalha pois em java e muito facil e asp nao sei como deve ser feito.

      Se puder entre em contato: macmiller.app@gmail.com

    Abracos. CelioMiller.

    sexta-feira, 20 de setembro de 2013 18:28