Totalizar una Columna en un DataGridView

Siguiendo la consulta de Jesús Pérez, preguntando como totalizar la suma de una columna de un DataGridView, poniendo como ejemplo recorrer las filas de una columna y efectuar las operaciones que consideremos oportunas. Aquí tenéis el enlace para resolverlo según MSDN: http://msdn.microsoft.com/es-es/library/system.data.datatable.compute.aspx



' Computar la suma de la columna 'Capital'
Dim total As Object = dt.Compute("SUM(Capital)", Nothing)
' visualizar el resultado en la barra
Me.Text = total.ToString

Si por el contrario optamos por hacerlo recorriendo las filas de la Columna… (tal i como me habéis solicitado) el código seria algo similar al siguiente :
... Load()
'Disparar el calculo cada vez que editamos 
AddHandler Me.dataGridView1.CellEndEdit, AddressOf Sumar
'Calcular totalizando la columna 3 "Salario"
Me.dataGridView1.Columns(3).HeaderText = "Sueldo"
Me.dataGridView1.AllowUserToAddRows = False
Me.dataGridView1.CurrentCell = dataGridView1.Rows(0).Cells(3)
Sumar()
... End Sub

'
' Sumar las cantidades de una columna
'
Private Columna As Integer = 3
Sub Sumar()
    Dim Total As Integer = 0      
    'Acumular el total
    Dim UltimaFila As Integer = Me.dataGridView1.Rows.Count
    'Solo calculamos si modificamos la columna
    If Me.dataGridView1.CurrentCell.ColumnIndex = Columna Then
        For Each row As DataGridViewRow In Me.dataGridView1.Rows
            If row.Index < UltimaFila - 1 Then Total += row.Cells(Columna).Value
        Next
        Me.dataGridView1.Rows(UltimaFila - 1).Cells(3).Value = Total.ToString
    End If
End Sub

Pd. No dudeis en pedirme el proyecto completo si estais interesados, o si quereis comentar alguna parte del codigo.

 

41 thoughts on “Totalizar una Columna en un DataGridView”

  1. Amigo primero dejame felicitarte por tu blog es muy bueno no se si me puedes ayudar con el codigo de este ejemplo me interesa verlo mas a detalle, saludos

  2. Hola Raul,
    Supongo que no estas utilizando VB9, pues este dispone de lo que llamamos “delegados relajados”, esto permite llamar a las funciones sin las acostumbradas ‘firmas’…
    Sub Loquesea(e as object, sender as system…)
    Lo que te esta indicando el error, es que necesitas proveer los parametros que sean necesarios… a saber si VB8 :

    Private Sub MiFuncion(ByVal e As Object, ByVal sender As DataGridViewCellEventArgs)

    Saludos,
    Pep Lluis,

  3. Hola Fernando!
    Gracias por tus amables palabras… dime como puedo ayudarte, que parte te interesa detallar?

    Espero tus noticias,
    Pep Lluis,

  4. Saludos.
    Mi preguntan es en que parte se coloca esta porcion de codigo
    .. Handles Me.Load
    ‘Disparar el calculo cada vez que editamos
    AddHandler Me.dataGridView1.CellEndEdit, AddressOf Sumar
    ‘Calcular el contenido inicial de la columna
    Me.dataGridView1.Columns(3).HeaderText = “Salario”
    Me.dataGridView1.AllowUserToAddRows = False
    Me.dataGridView1.CurrentCell = dataGridView1.Rows(0).Cells(3)
    Sumar()
    ..
    End Sub

  5. Hola Jartiem,
    El evento hace referencia al Form.Load en este caso, aunque puedes añadir el AddHandler en cualquier funcion de inicializacion.

    Saludos,
    Pep Lluis,

  6. Amigo muy bueno tu ejemplo no se si me puedes ayudar con el codigo completo a fsigu, en hotmail.
    Muchas gracias

  7. Muy interesante, pero.
    Como conseguir el resultado del saldo en una tercera columna en un DataGridView
    Ejemplo 1ª ingreso 2ªPago 3ºSaldo
    1ª ingreso 500 2ªPago 100 3ºSaldo = 400
    1ª ingreso 600 2ªPago 200 3ºSaldo = 800
    1ª ingreso 0 2ªPago 600 3ºSaldo = 200
    Espero haberme explicado

    Agradecería me ayudaran ya que llevo unos días dándole vueltas sin ningún resultado
    Muchas gracias.
    José

  8. Amigo, muy bueno el ejemplo, quisiera que me ayudes con el codigo completo ya que quisiera ampliar mis conocimientos en lo de los datagrids,te agradeceré por la ayuda

  9. Hola Eduardo,
    Solo tienes que insertar ese codigo o utilizar la idea que muestra, dentro de tu proyecto y en tu estructura de datos… pues seguro que no coincide con la mostrada.

    En todo caso si tienes dudas, puedes contactarme a traves de [Contact] y avanzamos sobre lo que necesitas.

    Saludos,
    Pep Lluis,

  10. Hola, como puedo hacer la suma de una columna de un datagridview, tengo las columnas concepto y precio, la suma seria de la columna precio, calcular el subtotal, el iva y el total pero aparte que me lo pudiera imprimir el datagridview. Mi correo es adnum_1@hotmail.com, gracias.

  11. Ola brother…!! mas que un comentario tengo una ENORME DUDA!!

    Estoy trabajando con VisualStudio 2008. (espero que puedas ayudarme…!)
    pero…
    Como puedo llenar un DataGridView con datos traidos desde un PictureBox?

    por ejemplo: este Data.. Tiene como campos “Id, producto, precio, cantidad y total” y quiero que todos esos campos se llenen al momento que le de un “clic” a una Imagen “X”…

    Lo curioso es que ya lo intente y SI toma los valores, la operacion lo hace con la ayuda de un “InputBox” pero… Todos los datos me los deja en la misma FILA… Todos y cada uno de los que quiera Ingresar!

    Esta es mi GRAN DUDA…!! Podrias ayudarme?

    ELEASTAD_1@hotmail.com

    Te dejo mi correo por si quieres que te mande algun tipo de pantallas o codigo, zaz?

    De anteMano… GRacias!!

  12. Ola brother…!! mas que un comentario tengo una ENORME DUDA!!

    Estoy trabajando con VisualStudio 2008. (espero que puedas ayudarme…!)
    pero…
    Como puedo llenar un DataGridView con datos traidos desde un PictureBox?

    por ejemplo: este Data.. Tiene como campos “Id, producto, precio, cantidad y total” y quiero que todos esos campos se llenen al momento que le de un “clic” a una Imagen “X”…

    Lo curioso es que ya lo intente y SI toma los valores, la operacion lo hace con la ayuda de un “InputBox” pero… Todos los datos me los deja en la misma FILA… Todos y cada uno de los que quiera Ingresar!

    Esta es mi GRAN DUDA…!! Podrias ayudarme?

    ELEASTAD_1@hotmail.com

    Te dejo mi correo por si quieres que te mande algun tipo de pantallas o codigo, zaz?

    De anteMano… GRacias!!

  13. Ola brother…!! mas que un comentario tengo una ENORME DUDA!!

    Estoy trabajando con VisualStudio 2008. (espero que puedas ayudarme…!)
    pero…
    Como puedo llenar un DataGridView con datos traidos desde un PictureBox?

    por ejemplo: este Data.. Tiene como campos “Id, producto, precio, cantidad y total” y quiero que todos esos campos se llenen al momento que le de un “clic” a una Imagen “X”…

    Lo curioso es que ya lo intente y SI toma los valores, la operacion lo hace con la ayuda de un “InputBox” pero… Todos los datos me los deja en la misma FILA… Todos y cada uno de los que quiera Ingresar!

    Esta es mi GRAN DUDA…!! Podrias ayudarme?

    ELEASTAD_1@hotmail.com

    Te dejo mi correo por si quieres que te mande algun tipo de pantallas o codigo, zaz?

    De anteMano… GRacias!!

  14. muy buen ejemplo gracias por tu ayuda, ahora estoy buscando codigo para sumar columnas de un datagridview, pero que me lo guarde en una base de datos ya que los datos que me muestran los hice en acces. gracias espero tu respuesta y gracias porque tus ejemplos me an servido mucho

  15. HOLA AMIGO, LA VERDAD LA SUMA DE DATAGRID ES MUY IMPORTANTE Y OS DOY LA GRACIAS POR COLGAR BUESTRO EJEMPLO, PERO, HAY CIERTAS DUDAS QUE NO LOGRO ENTENDER, Y UNA DE ELLAS, ES COMO LOGRAR APARECER EN LA ULTIMA FILA EL IMPORTE DE TOTALES.
    OTRA DUDA ES CUANDO TENGO CANTIDADES CON DECIMALES EN EL DATAGRID, ESTE ME SACA UNA SUMA CON ENTEROS, YA HE PROBADO DE TODO, PERO AL EJECUTAR, NO ME SACA NADA, YO QUIERO QUE LA SUMA DE LOS VALORES DEL DATAGRID ME SALGAN EN DECIMALES.

    PUES ESPERO BUESTRAS RESPUESTAS
    OS AGRADEZCO mucho

  16. Hola Alfred,
    Podrias dirigirte a los foros para formular tu pregunta o contactarme directamente?

    A traves del blog se hace casi imposible establecer una conversacion.

    Saludos,
    Pep Lluis,

  17. Hey tengo una pregunta. Estoy teniendo problemas con el dt me da error y ademas quiero que el total aparezca en un textbox.

  18. necesito urgente como comparar datos de las celdas de una columna de un datagridview, y me arroje el mayor valor en un textbox.. los datos han sido ingresados sin ninguna conexion a una bse de datos ..

  19. Me interesa bastante este codigo, estoy trabajando una aplicaciones en la cual necesito hacer precisamente esto, pero en vb.net ~ he escrito lo mismo pero solo me bota errores de index que no corresponde. Si podrias proporcionar el codigo completo seria genial.

    Saludos,

  20. Hola Alex,

    Todo el codigo que necesitas esta posteado en el mismo articulo. Solo debes crear un nuevo proyecto de Visual Studio y copiar cada segmento en su ubicacion… Load, etc.

    Si aun y asi continuas sin poder rodar el codigo, por favor avisame.
    PepLluis,

  21. Hola me gustaria insertar datos en una factura y que a su vez agregue los datos en un datagridview, ademas necesito que actualice al guardar pues no he podido hacerlo

     

  22. Tengo una tabla llamada “Tbl_RegistroHoras” la cual contiene el “Id” de la actividad y varios campos llamados “1”, “2”, “3”…”31″, que representan los dias del mes y al final tengo otro campo llamado “Total”. La idea es que en el DataGridView, el usuario pueda modificar los datos del DataGridView, que representaran horas que el usuario invirtio en una actividad. A este DataGridView necesito colocarle una fila de total (Mostrara el total de la Suma por Columnas) y una columna de tota (Mostrara la suma por fila de toda las columnas de días).

    Estoy usando =(Me.DataGridView1.DataSource = Me.BindingSource1) para enlazar el DataGrid con el ‘bindingsource.

    Para actualizar los datos uso un botón = Me.AdaptadorDeDatos.Update(CType(Me.BindingSource1.DataSource, DataTable))

    Estube tratando de realizar la suma (La que se mostraria como columna y sumaria las filas de las columnas) de la siguiente forma:

    If e.ColumnIndex >= 4 Or e.ColumnIndex < 35 Then
    Me.DataGridView1.Columns.Item(35).Selected = True
    Dim Resultado As Double = Val(Me.DataGridView1.Rows(e.RowIndex).Cells(4).Value) + Val(Me.DataGridView1.Rows(e.RowIndex).Cells(5).Value)
    Me.DataGridView1.Rows(e.RowIndex).Cells(35).Value = Resultado.ToString
    End If

    El Meollo: cuando intento sumar un valor de una celda cambiada con otro que aun no tiene valor me da error.
    Intente cambiar Val(…) por CType(…) y por CInt(…) pero me proboca error al actualizar.

    Espero su colaboración con este problema… de antemano gracias!

  23. Redondeo a 2 decimales en una columna
    DataGridView1.Columns(3).DefaultCellStyle.Format = “C2″ ‘aca indica q redondeara a dos decimales

  24. Por favor si pudieras ayudarme

    1.- Como puedo eliminar una fila en DataGridView
    2.- Como programo el boton eliminar en un DataGridView en memoria
    3.- Comp programo la impresion de la factura

  25. Hola necesito ayuda estoy tratando de hacer una aplicacion parecida a excel con un datagridview la propiedad selectionMode la tengo en CellSelect. lo que quiero saber es como sumar los valores que estan en las celdas seleccionadas y mostrar la suma en el mismo datagridview

  26. Hola q tal amigo, estoy haciendo un programa para facturacion, y quiero saber como puedo hacer para sumar por separado los siguentes valores.
    1. Solo los valores que tienen Iva 12%
    2. Solo los valores que tienen Iva 0%

    Estoy utilizando una base de datos y un datagrid.

    Espero que me puedan ayudar gracias.

Leave a Reply

Your email address will not be published. Required fields are marked *


*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>