none
Index was out of range. Must be non-negative and less than the size of the collection parameter name:index RRS feed

  • Pregunta

  • Tengo este problema cuando intento llamar a mi reportViewer, todos los datos que le paso a los procedimientos almacenados me los guarda en la base de datos pero despues me lanza la advertencia a la que me e referido en el titulo , alguien sabe el por que ?

     if (contadorFilas != 0)
                {
                    try
                    {
                        string cmd = string.Format("EXEC ActualizaFactura '{0}'", lblCodigo.Text.Trim());

                        DataSet ds = Utilidades.Ejecutar(cmd);

                        string NumFac = ds.Tables[0].Rows[0]["NumFac"].ToString().Trim();

                        foreach (DataGridViewRow Fila in dataGridView1.Rows)
                        {
                            cmd = string.Format("EXEC ActualizaDetalles '{0}', '{1}', '{2}', '{3}'", NumFac, Fila.Cells[0].Value.ToString(),
                               Fila.Cells[2].Value.ToString(), Fila.Cells[3].Value.ToString());
                            ds = Utilidades.Ejecutar(cmd);
                        }

                        cmd = "EXEC DatosFactura " + NumFac;
                        ds = Utilidades.Ejecutar(cmd);


                        Reporte rp = new Reporte();
                        rp.reportViewer1.LocalReport.DataSources[0].Value = ds.Tables[0];
                        rp.ShowDialog();

                        Nuevo();

                    }
                    catch (Exception error)
                    {

                        MessageBox.Show("Hubo un error " + error.Message);
                    }

    sábado, 3 de febrero de 2018 17:42

Respuestas

  • Hola, eso indica que estás haciendo referencia a un indice de columna que no está en el datagridview, cuantas columnas tiene el datagridview? , no que en esta parte del código

                foreach (DataGridViewRow Fila in dataGridView1.Rows)
                        {
                            cmd = string.Format("EXEC ActualizaDetalles '{0}', '{1}', '{2}', '{3}'", NumFac, Fila.Cells[0].Value.ToString(),
                               Fila.Cells[2].Value.ToString(), Fila.Cells[3].Value.ToString());
                            ds = Utilidades.Ejecutar(cmd);
                        }

    haces referencia a la celda de la columna 0 y luego te pasas a la 2, es correcto? no necesitas la 1?


    Votar es agradecer.
    Saludos.
    Lima-Perú

    sábado, 3 de febrero de 2018 17:50