Posteado por: k3n0 | 28/12/2007

Agregar varias filas con resultados en un GridView

Como primer post de este blog dedicado a todos aquellos esforzados newbz como yo que se dedican a programar en .NET, les pongo una solución a un pequeño gran problema que me apareció en mi trabajo.

Al mostrar un gridview necesitaba mostrar en la última fila la sumatoria de las columnas del gridview.

Como soy de aquellos a los que rara vez les resultan los códigos de otras personas (Gracias san google pero a veces …) me puse a inventar un método para generar éstos resultados

primero les muestro el gridview

GridView sin totales pero con el footer

ahora para insertar los totales lo hice de la siguiente manera:

Code behind

Partial Class web_informe_informe
Inherits System.Web.UI.Page
'estas variables son declaradas aca para realizar la suma entre los valores de la columna.
'tambien se puede crear un array que almacene los valores

Dim total As Decimal
Dim total1 As Decimal
Dim total2 As Decimal
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
'aca llamo al procedimiento que genera la consulta
Dim miProc As New LlamarProcedimientos("SP_CONS_CABLEADO_PUNTOS_VOZ")
'agrego un parametro el cual está definido en el procedimieno almacenado
miProc.AgregarParametro("COD_ESTABLECIMIENTO", "0000000-")
'asigno el dataSet para recibir el resultado
Dim miDs As New Data.DataSet
'ejecuto el procedimiento y el resultado lo asigno al dataSet
miDs = miProc.EjecutarProcedimiento
'"Bindeo" (asigno) como dataSource del gridview al dataset que contiene los resultados
'del procedimiento almacenado
GridView1.DataSource = miDs
GridView1.DataBind()
End Sub


Acá tenemos que preocuparnos de llamar al evento RowDataBound el cual se ejecuta cuando se asignan datos al gridview



Protected Sub
GridView1_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowDataBound
'Cuando se asigne el valor a la columna realizará lo siguiente
'reviso si el argunmento del evento es un tipo de columna dataRow
If e.Row.RowType = DataControlRowType.DataRow Then
total1 = total1 + Convert.ToDecimal(DataBinder.Eval(e.Row.DataItem, "NOMBRE CAMPO1"))
'si no es dataRow entonces verifico que sea el footer de la página
ElseIf e.Row.RowType = DataControlRowType.Footer Then
'si es el footer entonces asigno el valor almacenado en total x
e.Row.Cells(0).Text = total1
End If
If e.Row.RowType = DataControlRowType.DataRow Then
total = total + Convert.ToDecimal(DataBinder.Eval(e.Row.DataItem, "NOMBRE CAMPO 2"))
ElseIf e.Row.RowType = DataControlRowType.Footer Then
e.Row.Cells(1).Text = total
End If
If e.Row.RowType = DataControlRowType.DataRow Then
total2 = total2 + Convert.ToDecimal(DataBinder.Eval(e.Row.DataItem, "NOMBRE CAMPO 3"))
'SI LA CELDA ES UNA CELDA "FOOTER" ENTONCES
ElseIf e.Row.RowType = DataControlRowType.Footer Then
'ASIGNAMOS LOS TOTALES
e.Row.Cells(2).Text = total2
End If
End Sub

asi debería quedar despues del cambio

ahh se me olvidaba

La clase que maneja conexiones a bases de datos

http://www.dotnetcr.com/Libreria.aspx?art=87&tag=Como-realizar-conexion-con-nuestra-base-de-datos

La clase que llama a procedimientos almacenados y su completa descripción aquí

http://www.dotnetcr.com/Libreria.aspx?art=97&tag=Como-invocar-Procedimientos-Almacenados-en-nuestra-clase-conexion

Bueno espero que les resulte ahora voy a ver numb3rs
Cualquier duda avisen

see ya!!!

happy programing!!


Respuestas

  1. Buenos días, disculpa no tendras por ahi el codigo para C#.

    saludos

  2. No tengo el código debido a que no programo en c#

    pero aca tienes un buen conversor para que puedas seguir trabajando.

    http://www.elguille.info/NET/WebServices/deCSaVB_web.aspx

    espero tus comentarios

  3. Gracias por tu pronta respuesta, pero encontre esta buena solucion y muy rapida

    http://aspalliance.com/782

  4. Hola,
    Muy bueno tu código, pero creo que no te funciona cuando paginas los resultados, por ejemplo de 20 en 20 solo mostrará los resultados de los que hace el databind, de modo que los totales serán parciales.

  5. Toda la razón del mundo…
    voy a ver que se puede hacer para realizar estos calculos…

    ahora debo hacer de nuevo el proceso de mostrar resultados en una grilla así que mejoraré el codigo y veré si puedo agregar páginación

    see ya!!!

  6. Hola que tal andaba buscando algo en google y llegue a este blog, no se si me puedas ayudar. Tengo un gridview, el cual se carga despues de dar click a un boton y pasar un codigo, pero el gridview se carga dentro de un For, el cual cambia el parametro del SqlDataSource entonces por ejemplo, el For hace 3 pasadas, en la primera obtiene dos filas una que tiene los valores 2 y otra con 3; en la 2da pasada obtiene 3 filas, con 4, 5 y 6 y en la 3ra pasada obtiene 7, 8, 9, obviamente al final en la pagina se va a mostrar solo lo último, osea 7, 8, 9 y no se como hacer para obtener todos los datos obtenidos anteriormente, osea 2, 3, 4, 5, 6, 7, 8, 9. Espero me puedas dar alguna sugerencia te agradeceria mucho. Saludos

  7. Hola, veo que el codigo funciona cuando el numero de columnas son dinamicas


Dejar una respuesta

Su respuesta:

Categorías