none
Datagridview con final de fila con totales RRS feed

  • Pregunta

  • Hola amigos,

    Su apoyo por favor, estoy llenado un datagridview desde BD y las 2 primeras columas son fijas por ejemplo cliente descripción.

    Las demás columnas pueden ser variables 2 fijas + 3 o 4 o 5 o 6 o 7 columnas las cuales son llenadas automaticamente.

    Lo que requiero es agregar una fila al final que muestre el total por cada columna y por cada fila.

    Gracias por el apoyo.


    Conocuica

    • Cambiado Enrique M. Montejo lunes, 4 de septiembre de 2017 6:27 Pregunta relacionada con el acceso a datos.
    martes, 29 de agosto de 2017 22:59

Respuestas

  • Suponiendo que los datos de la BD los traes a un DataTable y luego el DataTable lo muestras en el DataGridView mediante DataBinding, entonces la forma más sencilla de resolverlo consiste en añadir la fila y la columna adicionales directamente en el DataTable, antes de "bindearlo" al DataGridView.

    Para añadir la columna, hazle al DataTable un .Columns.Add, y use el Expression de la columna para que sea una columna calculada (en la expresión métele la suma de las columnas que se tienen que totalizar). Hay un ejemplo al final de la documentación:

    https://msdn.microsoft.com/en-us/library/system.data.datacolumn.expression%28v=vs.110%29.aspx

    Para la fila final de totales, haz un .Rows.Add sobre el DataTable para inyectarle una fila más. En este caso, no existe una expresión que te calcule los totales automáticamente; tendrás que calcularlos tú mediante programación y meterlos en la fila. Este cálculo puedes hacerlo mediante un bucle que recorra todas las filas anteriores y vaya sumando los valores. O si el rendimiento no es crítico, podrías enviar un "select sum(...) ..." a la base de datos para que el servidor te calcule los totales, y luego los datos resultantes copiarlos a esa fila que añadiste en el datatable.

    • Propuesto como respuesta Marcelo PF miércoles, 30 de agosto de 2017 15:29
    • Marcado como respuesta Enrique M. Montejo lunes, 4 de septiembre de 2017 6:26
    miércoles, 30 de agosto de 2017 6:17

Todas las respuestas

  • Buenas compañero,

    Podrias indicarnos como llenas tu datagridview? dependiendo de como lo llenes, hay que hacer de una manera o de otra.

    Atte


    No olvides votar si mi comentario te ha ayudado y marcarlo como respuesta si ha sido la solución!

    miércoles, 30 de agosto de 2017 6:14
  • Suponiendo que los datos de la BD los traes a un DataTable y luego el DataTable lo muestras en el DataGridView mediante DataBinding, entonces la forma más sencilla de resolverlo consiste en añadir la fila y la columna adicionales directamente en el DataTable, antes de "bindearlo" al DataGridView.

    Para añadir la columna, hazle al DataTable un .Columns.Add, y use el Expression de la columna para que sea una columna calculada (en la expresión métele la suma de las columnas que se tienen que totalizar). Hay un ejemplo al final de la documentación:

    https://msdn.microsoft.com/en-us/library/system.data.datacolumn.expression%28v=vs.110%29.aspx

    Para la fila final de totales, haz un .Rows.Add sobre el DataTable para inyectarle una fila más. En este caso, no existe una expresión que te calcule los totales automáticamente; tendrás que calcularlos tú mediante programación y meterlos en la fila. Este cálculo puedes hacerlo mediante un bucle que recorra todas las filas anteriores y vaya sumando los valores. O si el rendimiento no es crítico, podrías enviar un "select sum(...) ..." a la base de datos para que el servidor te calcule los totales, y luego los datos resultantes copiarlos a esa fila que añadiste en el datatable.

    • Propuesto como respuesta Marcelo PF miércoles, 30 de agosto de 2017 15:29
    • Marcado como respuesta Enrique M. Montejo lunes, 4 de septiembre de 2017 6:26
    miércoles, 30 de agosto de 2017 6:17
  • El llenado desde una BD con un Stoere procedure desde la capa de datos, todo a una datatable y luego enviado al Datagridview.

    Gracias por el apoyo.


    Conocuica

    jueves, 31 de agosto de 2017 18:21