private void button2_Click(object sender, EventArgs e)
 {
     listaExpiraciones.Clear();
     for (int contx = 0; contx < dataGridView1.RowCount; contx++)
     {
         if (Convert.ToString(dataGridView1["Compra", contx].Value).Length > 0)
         {
             ColeccionExpiraciones coln = new ColeccionExpiraciones();
             coln.NumeroDia     = Convert.ToInt32(dataGridView1["Dia", contx].Value) + Convert.ToInt32(textBox5.Text);
             coln.Monto         = Convert.ToDouble(dataGridView1["Compra", contx].Value);
             coln.DiaAplicacion = Convert.ToInt32(dataGridView1["Dia", contx].Value);
             listaExpiraciones.Add(coln);
         }
     }
     ProcesarDatos();
 }
        private void ProcesarDatos()
        {
            dataGridView1.Rows.Clear();
            double montoInicial       = Convert.ToDouble(textBox2.Text);
            double porcentaje         = Convert.ToDouble(textBox3.Text) / 100;
            double importeAcumulado   = 0;
            double invertido          = montoInicial;
            double importeReinversion = Convert.ToDouble(textBox4.Text);
            int    numDiaActual;

            ColeccionExpiraciones col = new ColeccionExpiraciones();

            col.NumeroDia     = Convert.ToInt32(textBox5.Text);
            col.Monto         = montoInicial;
            col.DiaAplicacion = 0;

            listaExpiraciones.Add(col);

            for (int contx = 0; contx < Convert.ToInt32(textBox1.Text); contx++)
            {
                numDiaActual = contx + 1;
                dataGridView1.Rows.Add(numDiaActual, invertido, porcentaje * 100, "0", "0");

                var pagodiarioCalculado = invertido * porcentaje;
                importeAcumulado += pagodiarioCalculado;
                dataGridView1["PagoDiario", dataGridView1.RowCount - 1].Value = pagodiarioCalculado;
                dataGridView1["Acumulado", dataGridView1.RowCount - 1].Value  = importeAcumulado;

                foreach (var colx in listaExpiraciones)
                // Comparar la lista de expiraciones para ver si el dia destino se alcanzo
                {
                    if (colx.NumeroDia == numDiaActual)
                    {
                        dataGridView1["Vencimiento", dataGridView1.RowCount - 1].Value =
                            Convert.ToString(dataGridView1["Vencimiento", dataGridView1.RowCount - 1].Value).Length > 0 ?
                            (Convert.ToDouble(dataGridView1["Vencimiento", dataGridView1.RowCount - 1].Value) + colx.Monto) : colx.Monto;
                        invertido -= colx.Monto;
                    }

                    if (colx.DiaAplicacion == numDiaActual)
                    {
                        dataGridView1["Compra", dataGridView1.RowCount - 1].Value = colx.Monto;
                        invertido += colx.Monto;
                    }
                }


                if (importeAcumulado > importeReinversion)
                {
                    //Acumular importes de reinversion y agregar reinversion a la lista de expiraciones
                    int    resEntero = Convert.ToInt32(importeAcumulado * 100) / Convert.ToInt32(importeReinversion * 100);
                    double nuevoImporteReinversion = importeReinversion * resEntero;
                    dataGridView1["Reinversion", dataGridView1.RowCount - 1].Value = nuevoImporteReinversion;
                    importeAcumulado = importeAcumulado - nuevoImporteReinversion;
                    invertido       += nuevoImporteReinversion;

                    ColeccionExpiraciones coln = new ColeccionExpiraciones(); // Agregar reinversion a la lista de expiraciones
                    coln.NumeroDia     = numDiaActual + Convert.ToInt32(textBox5.Text);
                    coln.Monto         = nuevoImporteReinversion;
                    coln.DiaAplicacion = 0;
                    listaExpiraciones.Add(coln);
                }
            }
        }