Usuário com melhor resposta
Loop de mensalidade c#

Pergunta
-
i = Convert.ToInt32(txtparcelas.Text); try { ConectarBanco.Open(); while (i > 0) { MySqlCommand GerarP = new MySqlCommand("Insert into parcela" + "(venda_cod, dtavencimento, parcela, valorprincipal)" + "values" + "(@venda_cod, @dtavencimento, @parcela, @valorprincipal)", ConectarBanco); GerarP.Parameters.Add("@venda_cod", MySqlDbType.Text).Value = txtcodigo.Text;
//AQUI NA DATA QUERIA QUE ELE PEGASSE A DATA E ACRESCENTASSE UM MES TIPO 1: 30/05/2018 2: 30/06/2018 ...
GerarP.Parameters.AddWithValue("@dtavencimento", DateTime.Parse(txtdtavencimento.Text));
// JÁ AQUI QUERIA QUE COLOCASSE ME PARCELAS ASSIM TIPO 1/12 2/12 3/12 .... GerarP.Parameters.Add("@parcela", MySqlDbType.Text).Value = txtparcelas.Text; GerarP.Parameters.Add("@valorprincipal", MySqlDbType.Text).Value = txtvalomensal.Text; GerarP.ExecuteNonQuery(); i = i - 1; }
Respostas
-
Utilize o método AddMonths e String.Concat para concatenar as parcelas.
Segue código (não testado):
var i = 0; var qtdParcelas = Convert.ToInt32(txtparcelas.Text); try { ConectarBanco.Open(); while (i < qtdParcelas) { MySqlCommand GerarP = new MySqlCommand("Insert into parcela" + "(venda_cod, dtavencimento, parcela, valorprincipal)" + "values" + "(@venda_cod, @dtavencimento, @parcela, @valorprincipal)", ConectarBanco); GerarP.Parameters.Add("@venda_cod", MySqlDbType.Text).Value = txtcodigo.Text; GerarP.Parameters.AddWithValue("@dtavencimento", DateTime.Parse(txtdtavencimento.Text).AddMonths(i+1)); GerarP.Parameters.Add("@parcela", MySqlDbType.Text).Value = String.Concat((i+1).ToString(),"/",qtdParcelas.ToString()); GerarP.Parameters.Add("@valorprincipal", MySqlDbType.Text).Value = txtvalomensal.Text; GerarP.ExecuteNonQuery(); i++; }
Carlos Eduardo Ferreira
- Editado CarlosEduardo Ferreira quarta-feira, 26 de dezembro de 2018 11:35
- Marcado como Resposta A.Junior.cta domingo, 30 de dezembro de 2018 18:57
Todas as Respostas
-
Dá uma conferida neste vídeo: C# - Gerar Parcelas em datagridView
. Vai te ajudar a resolver o seu problema.
-
Utilize o método AddMonths e String.Concat para concatenar as parcelas.
Segue código (não testado):
var i = 0; var qtdParcelas = Convert.ToInt32(txtparcelas.Text); try { ConectarBanco.Open(); while (i < qtdParcelas) { MySqlCommand GerarP = new MySqlCommand("Insert into parcela" + "(venda_cod, dtavencimento, parcela, valorprincipal)" + "values" + "(@venda_cod, @dtavencimento, @parcela, @valorprincipal)", ConectarBanco); GerarP.Parameters.Add("@venda_cod", MySqlDbType.Text).Value = txtcodigo.Text; GerarP.Parameters.AddWithValue("@dtavencimento", DateTime.Parse(txtdtavencimento.Text).AddMonths(i+1)); GerarP.Parameters.Add("@parcela", MySqlDbType.Text).Value = String.Concat((i+1).ToString(),"/",qtdParcelas.ToString()); GerarP.Parameters.Add("@valorprincipal", MySqlDbType.Text).Value = txtvalomensal.Text; GerarP.ExecuteNonQuery(); i++; }
Carlos Eduardo Ferreira
- Editado CarlosEduardo Ferreira quarta-feira, 26 de dezembro de 2018 11:35
- Marcado como Resposta A.Junior.cta domingo, 30 de dezembro de 2018 18:57
-
-
int p; int i; String QtdParcela; public void GerarParcelas() { // LOOP PARA GERAR PARCELAS QtdParcela = txtparcelas.Text; p = 1; i = 1; string Mensal = txtvalomensal.Text; dtparcelas.Columns["valorprincipal"].DefaultCellStyle.Format = ("C2"); try { ConectarBanco.Open(); while (i <= Convert.ToInt32(txtparcelas.Text)) { MySqlCommand GerarP = new MySqlCommand("Insert into parcela" + "(venda_cod, dtavencimento, parcela, valorprincipal)" + "values" + "(@venda_cod, @dtavencimento, @parcela, @valorprincipal)", ConectarBanco); GerarP.Parameters.Add("@venda_cod", MySqlDbType.Text).Value = txtcodigo.Text; GerarP.Parameters.AddWithValue("@dtavencimento", DateTime.Parse(txtdtavencimento.Text).AddMonths( i + 1)); GerarP.Parameters.Add("@parcela", MySqlDbType.Text).Value = ( p + "/" + txtparcelas.Text); GerarP.Parameters.AddWithValue("@valorprincipal", Double.Parse(Mensal, NumberStyles.Currency)); GerarP.ExecuteNonQuery(); i++; p = p + 1; } } catch(MySqlException Erro) { MessageBox.Show("Falha no parcelamento" + Erro); ConectarBanco.Close(); }
Carlos consegui fazer da seguinte forma a questão da mensalidade, o que realmente não consigo fazer é a data mudar corretamente, tipo esse código que coloquei acima ele gera as parcelas, porém se coloco dia 30/12/2018 ele gera a partir de 30/02/2019 até 30/01/2020, ou seja pula dois , meses, sem falar que ele coloca fevereiro com 30 dias.
- Editado A.Junior.cta quinta-feira, 27 de dezembro de 2018 01:32
-
Tenta esse link:
-
Está pulando dois meses porque você iniciou a variável i com valor 1. Ou inicia a variável com valor 0, ou altera o código de AddMonths( i + 1) para AddMonths(i).
O .NET não gera data inexistentes. O código abaixo vai gerar o resultado: 2/28/2019 12:00:00 AM
Console.WriteLine(Convert.ToDateTime("12/30/2018").AddMonths(2).ToString());
Carlos Eduardo Ferreira
-
Realmente não me toquei do erro, então para ajudar a quem precisar deixo o código funcionando 100%;
int p; int i; public void GerarParcelas() { p = 1; i = 0; string Mensal = txtvalomensal.Text; dtparcelas.Columns["valorprincipal"].DefaultCellStyle.Format = ("C2"); try { ConectarBanco.Open(); while (i < Convert.ToInt32(txtparcelas.Text)) { MySqlCommand GerarP = new MySqlCommand("Insert into parcela" + "(venda_cod, dtavencimento, parcela, valorprincipal)" + "values" + "(@venda_cod, @dtavencimento, @parcela, @valorprincipal)", ConectarBanco); GerarP.Parameters.Add("@venda_cod", MySqlDbType.Text).Value = txtcodigo.Text; GerarP.Parameters.AddWithValue("@dtavencimento", DateTime.Parse(txtdtavencimento.Text).AddMonths( i + 1)); GerarP.Parameters.Add("@parcela", MySqlDbType.Text).Value = ( p + "/" + txtparcelas.Text); GerarP.Parameters.AddWithValue("@valorprincipal", Double.Parse(Mensal, NumberStyles.Currency)); GerarP.ExecuteNonQuery(); i++; p = p + 1; } } catch(MySqlException Erro) { MessageBox.Show("Falha no parcelamento" + Erro); ConectarBanco.Close(); }