C sharp - Sumar Columna de un DataGridView

 
Vista:
sin imagen de perfil
Val: 2
Ha disminuido su posición en 27 puestos en C sharp (en relación al último mes)
Gráfica de C sharp

Sumar Columna de un DataGridView

Publicado por Cristian (1 intervención) el 02/01/2020 22:17:26
Saludos colegas, como lo dice el titulo tengo un DataGridView con datos, y un metodo OnRowDataBound que me sumara los datos de la columna "Precio", alojando el total de los precios en un TextBox "totaltxt";

El metodo funciona bien, suma los datos y los muestra en el textbox el problema es...que al sumar los valores de la columna precio no me suma el ultimo valor quedando con un total no exacto... adjunto metodo y grilla;

111111


22222222

Como se ve en la grilla el valor total deberia ser 27.000 y no 22.000

PD:
He probado cambiando el pagesize y activando el showfooter para que contara la ultima row pero nada ha servido de antemano muchas gracias!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Enrique
Val: 194
Bronce
Ha mantenido su posición en C sharp (en relación al último mes)
Gráfica de C sharp

Sumar Columna de un DataGridView

Publicado por Enrique (69 intervenciones) el 03/01/2020 01:05:46
No estas accediendo al ultimo valor de tu grilla por ello es que no te suma el último valor
Te recomiendo que uses un for

(int x==0; x < grilla.rows.length; i++)

Con eso garantizas que recorrerá todas las filas

y la asignación de tu textbox los hagas hasta terminar el bucle (Esto solo por buena practica)


Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Roy
Val: 66
Ha mantenido su posición en C sharp (en relación al último mes)
Gráfica de C sharp

Sumar Columna de un DataGridView

Publicado por Roy (19 intervenciones) el 03/01/2020 20:42:14
Puntos a considerar:
1. El evento RowDataBound se dispara cada vez que los datos de una fila son enlazados a un origen de datos. Tu DataSource cuenta con 5 registros, entonces estas invocando el evento 5 veces y las 5 veces haces el mismo calculo.
2. Con el metodo Row.Cast estas almacenando los datos obtenidos en un diccionario de datos al que le aplicas el metodo Sum. Y nuevamente, lo estas repitiendo para cada una de las filas en cada carga de datos a una fila.
Para mejorar el codigo que tienes podrias aplicar los siguientes cambios y asi asegurar que Totaltxt te muestre el dato correcto::
1. Declara la variable total fuera del evento RowDataBound.
2. Cuando se dispara el evento, captura el valor de la celda para el dato recien agregado al control utilizando el argumento e, y agregalo a total:
1
2
3
4
5
6
7
8
9
int total = 0;
protected void GrillaClientes_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        total += Convert.ToInt32(e.Row.Cells[3].Text);
        Totaltxt.Text = total.ToString();
    }
}
Puedes utilizar un bucle for, pero lo estarias ejecutando (igualmente) 5 veces, cada vez que se agrega una fila. Si tu lista de datos contiene muchas filas, el proceso puede tardar en ejecutarse y se estaria haciendo redundancia y ocupando memoria sin necesidad.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar