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:

  1. 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 !!!

    ResponderBorrar
  2. Muchas gracias por el post me sirvio de mucho.-

    ResponderBorrar
  3. 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.

    ResponderBorrar
  4. Excelente post, muchas gracias me a servido mucho.

    ResponderBorrar
  5. Gracis por el aporte, me sacaste de un apuro.

    ResponderBorrar
  6. 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?

    ResponderBorrar

Gracias por sus comentarios.




Carlos Juan