none
Sumar columna DATAGRIDVIEW RRS feed

  • Pregunta

  • Hola a todos!

    Mi problema es que tengo que sumar la columna de un datagridview, lo único es que debe de aparecer en el mismo datagridview como fila final.

    el código que tengo es asi:

    '#####################################################################################
                    '#####################################################################################
                    'Cargamos el datagridview dgvTicket con la linea que hemos creado
                    'Actualizamos el datagridview dgvExistencies

                    'Crear la Tabla
                    Dim Ticket As String = "SELECT Article,Eixen,Preu,Dto,Total FROM Ticket WHERE NTicket= " & txtNTicket.Text & ""
                    ' Crear un nuevo objeto del tipo DataAdapter
                    da3 = New OleDbDataAdapter(Ticket, conexion)
                    ' Crear los comandos de insertar, actualizar y eliminar
                    Dim cb3 As New OleDbCommandBuilder(da3)
                    dt3 = New DataTable
                    ' Llenar la tabla con los datos indicados
                    da3.Fill(dt3)
                    'Cargamos los datos al DataGridView
                    dgvTicket.DataSource = dt3
                    'Para cambiar el nombre a una columna.
                    'dgvTicket.Columns(0).HeaderText = "Nº"
                    dgvTicket.Columns(0).HeaderText = "Article"
                    dgvTicket.Columns(1).HeaderText = "U."
                    dgvTicket.Columns(2).HeaderText = "€"
                    dgvTicket.Columns(3).HeaderText = "Dto."
                    dgvTicket.Columns(4).HeaderText = "Total"

                    'Alinear
                    dgvTicket.Columns(1).DefaultCellStyle.Alignment = DataGridViewContentAlignment.TopRight
                    dgvTicket.Columns(2).DefaultCellStyle.Alignment = DataGridViewContentAlignment.TopRight
                    dgvTicket.Columns(3).DefaultCellStyle.Alignment = DataGridViewContentAlignment.TopRight
                    dgvTicket.Columns(4).DefaultCellStyle.Alignment = DataGridViewContentAlignment.TopRight

                    'Formatos
                    dgvTicket.Columns(2).DefaultCellStyle.Format = ("###,##0.00 €")
                    dgvTicket.Columns(3).DefaultCellStyle.Format = ("###,##0")
                    dgvTicket.Columns(4).DefaultCellStyle.Format = ("###,##0.00 €")

    '############################################################################

    '############################################################################

     

    En concreto la columna "Total"... columns(4), es la que tengo que sumar...

    Esto lo necesito asi, porque dicho datagridview lo imprimo, directamente y tiene que ser el ticket de la aplicación.

     

    Un Saludo a todos

    lunes, 14 de febrero de 2011 16:40

Respuestas

  • Hola:

    Siempre y cuando el objeto DataTable NO TENGA ESTABLECIDA UNA CLAVE PRINCIPAL, es muy fácil sumar las filas de una columna del control DataGridView enlazada con un objeto DataTable, sin necesidad de recorrer la colección de objetos DataGridViewRow, porque para ello el objeto DataTable dispone de un método llamado Compute, que nos permite calcular una expresión.

    Cuando desees totalizar el importe de la columna Total, simplemente ejecutarías:

            ' Referenciamos el objeto DataTable enlazado con
            ' el control DataGridView.
            '
            Dim dt As DataTable = DirectCast(dgvTicket.DataSource, DataTable)

            ' Sumamos los valores de todas las filas de la columna Total.
            '
            Dim suma As Object = dt.Compute("SUM(Total)", Nothing)

            ' Añadimos una nueva fila al objeto DataTable,
            ' para que automáticamente se muestre en el
            ' control DataGridView el total de la columna
            ' sumada.
            '
            Dim row As DataRow = dt.NewRow()

            row("Total") = suma

            dt.Rows.Add(row)

    Al tener que añadir una nueva fila para mostrar la suma total, es por lo que te he comentado al principio lo de la clave principal, porque si el objeto DataTable tiene establecida una clave principal, no vas a poder insertar un valor NULL en la columna que forma la clave principal. Pero si no tiene una clave principal, entonces no pasa absolutamente nada.

    Sencillo y eficaz. :-)

    Un saludo

     


    Enrique Martínez
      [MS MVP - VB]

    lunes, 14 de febrero de 2011 17:32
    Moderador
  • hola

    [DataGridView] – Parte 5 - Cálculos Totales en filas y columnas

    revisa este ejemplo, al final esta el codigo en vb.net que puede descargar

    veras alli como se recorren las filas y se suman para totalizar la fila

    pero basicamente sabiendo la fila que quiere totalizar usarias

    Dim row As DataGridViewRow = DataGridView1.CurrentRow

    Dim importe As Integer = CInt(row.Cells(2).Value)

    Dim cantidad As Integer = CInt(row.Cells(3).Value)

    row.Cells(4).Value = importe * cantidad

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    lunes, 14 de febrero de 2011 16:56

Todas las respuestas

  • hola

    [DataGridView] – Parte 5 - Cálculos Totales en filas y columnas

    revisa este ejemplo, al final esta el codigo en vb.net que puede descargar

    veras alli como se recorren las filas y se suman para totalizar la fila

    pero basicamente sabiendo la fila que quiere totalizar usarias

    Dim row As DataGridViewRow = DataGridView1.CurrentRow

    Dim importe As Integer = CInt(row.Cells(2).Value)

    Dim cantidad As Integer = CInt(row.Cells(3).Value)

    row.Cells(4).Value = importe * cantidad

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    lunes, 14 de febrero de 2011 16:56
  • Hola:

    Siempre y cuando el objeto DataTable NO TENGA ESTABLECIDA UNA CLAVE PRINCIPAL, es muy fácil sumar las filas de una columna del control DataGridView enlazada con un objeto DataTable, sin necesidad de recorrer la colección de objetos DataGridViewRow, porque para ello el objeto DataTable dispone de un método llamado Compute, que nos permite calcular una expresión.

    Cuando desees totalizar el importe de la columna Total, simplemente ejecutarías:

            ' Referenciamos el objeto DataTable enlazado con
            ' el control DataGridView.
            '
            Dim dt As DataTable = DirectCast(dgvTicket.DataSource, DataTable)

            ' Sumamos los valores de todas las filas de la columna Total.
            '
            Dim suma As Object = dt.Compute("SUM(Total)", Nothing)

            ' Añadimos una nueva fila al objeto DataTable,
            ' para que automáticamente se muestre en el
            ' control DataGridView el total de la columna
            ' sumada.
            '
            Dim row As DataRow = dt.NewRow()

            row("Total") = suma

            dt.Rows.Add(row)

    Al tener que añadir una nueva fila para mostrar la suma total, es por lo que te he comentado al principio lo de la clave principal, porque si el objeto DataTable tiene establecida una clave principal, no vas a poder insertar un valor NULL en la columna que forma la clave principal. Pero si no tiene una clave principal, entonces no pasa absolutamente nada.

    Sencillo y eficaz. :-)

    Un saludo

     


    Enrique Martínez
      [MS MVP - VB]

    lunes, 14 de febrero de 2011 17:32
    Moderador