none
Error al borrar fila de un DataTable y actualizar el dataGridView [WinForms - C#] RRS feed

  • Pregunta

  • Hola comunidad, les consulto por este error que me aparece al borrar una fila de un DataTable del cual se realiza una suma para mostrar un total.

    Este es el error que me aparece en la fila donde se suma el total(En el metodo de suma).

    "System.Data.RowNotInTableException: 'Esta fila ha sido eliminada de la tabla y no contiene ningún dato. BeginEdit() permite la creación de nuevos datos en esta fila.'"

    Metodo suma: (El error lo marca en la fila que está en negrita)

            public double SumarTotal()
            {
                double total = 0;
                for (int i = 0; i < dsCajaCopia.Tables["DTCajaDiaria"].Rows.Count; i++)
                {
                        total += double.Parse(dsCajaCopia.Tables["DTCajaDiaria"].Rows[i]["Precio"].ToString());
                }
                return total;
            }

    Evento RowsDeleted donde se usa el metodo SumarTotal().

    GuardarVentas lo que hace es actualizar la tabla principal cada vez que se borra una fila() (¿Debería usar AcceptChanges antes?)

            private void DataGridView1_RowsRemoved(object sender, DataGridViewRowsRemovedEventArgs e)
            {
                GuardarVentas();
                totalNros.Text = SumarTotal().ToString();
            }

    Espero alguien pueda ayudarme, ya probé todo lo que se me ocurre y no pude solucionarlo.

    Saludos!


    • Editado FedeIseas viernes, 26 de julio de 2019 0:10 Aclaracion
    viernes, 26 de julio de 2019 0:09

Todas las respuestas

  • No se ve el sitio donde borras la fila, pero hay dos formas de hacerlo: Con Delete y con Remove. Si usas Remove, se elimina por completo de la tabla. Pero si usas Delete, solo se marca como borrada pero se deja dentro de la tabla. Esto se hace para que si luego haces un ".Update", el dataadapter sepa que tiene que enviar una instrucción de borrado al servidor. Pero el problema es que, dado que todavia existe en la tabla, si haces un bucle "for" que recorra todas las filas, el bucle pasa por la fila borrada. Pero al intentar leer un dato de esa fila borrada, te sale el error que estás viendo.

    La solución es una de dos: O bien usar Remove (haz esto si NO vas a usar un DataAdapter para grabar el cambio en base de datos), o bien dejar el Delete pero entonces en el bucle hay que poner un "if" que examine el DataRowState y si el valor es Deleted entonces que se salte esa fila y no intente sumarla al total.

    • Propuesto como respuesta eRiver1 viernes, 26 de julio de 2019 20:33
    viernes, 26 de julio de 2019 6:24