jueves, 15 de octubre de 2009

Totalizar en el pie de GridView ( totals GridView footer)

Seguramente han necesitado totalizar una columna de en un gridview.



lo primero es que tiene que hacer el llenado del grid:

Base de datos:

Nortwind

Librerias:

using System.Data;
using System.Data.SqlClient;

Para mostrar el pie de página, tiene que establecer el atributo de ShowFooter="True".

LLENADO:

string sql="SELECT OrderID, ProductID, UnitPrice, Quantity, UnitPrice * Quantity AS total";
sql += " FROM [Order Details]";
sql += " WHERE OrderID=10285";
SqlConnection cn = new SqlConnection(STRINGCN);
SqlDataAdapter da = new SqlDataAdapter(sql, cn);
DataSet ds=new DataSet();
da.Fill(ds, "Details");
GridView1.DataSource = ds.Tables["Details"];
GridView1.DataBind();

tenemos que dimencionar una variable para totalizar: decimal dTotal = 0;
ahora vamos a capturar el evento: RowDataBound

ejemplo completo:

decimal dTotal = 0;
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if(e.Row.RowType == DataControlRowType.DataRow)
{
dTotal += Convert.ToDecimal(DataBinder.Eval(e.Row.DataItem, "total"));
}
if (e.Row.RowType == DataControlRowType.Footer)
{
e.Row.Cells[3].Text = "Total:";
e.Row.Cells[4].Text = dTotal.ToString("c");
e.Row.Cells[4].HorizontalAlign = HorizontalAlign.Right;
e.Row.Font.Bold = true;
}
}

8 comentarios:

Andy00 dijo...

para BV seria asi:
dim dTotal As Decimal = 0
Protected Sub GridView1_RowDataBound(ByVal sender As Object, ByVal e As GridViewRowEventArgs)
If e.Row.RowType = DataControlRowType.DataRow Then
dTotal += Convert.ToDecimal(DataBinder.Eval(e.Row.DataItem, "total"))
End If
If e.Row.RowType = DataControlRowType.Footer Then
e.Row.Cells(3).Text = "Total:"
e.Row.Cells(4).Text = dTotal.ToString("c")
e.Row.Cells(4).HorizontalAlign = HorizontalAlign.Right
e.Row.Font.Bold = True
End If
End Sub
----
una consultita ahora si quisiera sumar las columnas agregando otra columna !!!

PalSur dijo...

Muchas gracias por el post me sirvio de mucho.-

rommel dijo...

gracias, me sirvió el artículo, aunque encontré resolví una manera más fácil de hacerlo para no tener que consultar a la BD el total de la columna.

protected void dg_orden_coniva_RowDataBound(object sender, GridViewRowEventArgs e)
{
if ((e.Row.RowType == DataControlRowType.DataRow))
{
subtotal += Convert.ToInt32(e.Row.Cells[1].Text);
}
if (e.Row.RowType == DataControlRowType.Footer)
{
e.Row.Cells[0].Text = "Total";
e.Row.Cells[1].Text = Convert.ToString(subtotal);
}
}

Se calcula dentro de la misma grilla el total.

Anónimo dijo...

Excelente post, muchas gracias me a servido mucho.

Anónimo dijo...

Gracis por el aporte, me sacaste de un apuro.

Lidi dijo...

Gracias, me fue de gran ayuda

Anónimo dijo...

Muchas gracias, una consulta y si quisiera exportar esa grilla a un excel, como lo haría para que exporte el pie de pagina también?

JOSE VALENTIN dijo...

muy bueno me sirviooo