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

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í
Bueno espero que les resulte ahora voy a ver numb3rs
Cualquier duda avisen
see ya!!!
happy programing!!
Buenos días, disculpa no tendras por ahi el codigo para C#.
saludos
Por: Rogelio el 18/02/2008
a las 4:26 pm
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
Por: k3n0 el 18/02/2008
a las 4:57 pm
Gracias por tu pronta respuesta, pero encontre esta buena solucion y muy rapida
http://aspalliance.com/782
Por: Rogelio el 18/02/2008
a las 5:42 pm
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.
Por: Laura el 25/03/2008
a las 12:39 pm
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!!!
Por: k3n0 el 25/03/2008
a las 12:47 pm
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
Por: Diego el 06/05/2008
a las 4:28 am
Hola, veo que el codigo funciona cuando el numero de columnas son dinamicas
Por: Enrique el 12/06/2008
a las 1:43 pm