Wednesday 12 August 2015

Running Total In Gridview Footer In ASP.NET C# VB.NET

In this example i am going to demonstrate how to Display Running Total In GridView Footer Row In ASP.NET using C# and VB.NET. This method works with paging enabled gridview as well.
Running Total In Gridview Footer In ASP.NET

For demo purpose gridview is populated using sqldatasource having table with columns ID ,Name,Amount

I m showing total of amount column is gridview footer. for this we need to sum the the column in RowDataBound Even of Gridiew 

Html source of gridview is
<asp:GridView ID="GridView1" runat="server" 
              AutoGenerateColumns="False"
              DataKeyNames="ID" DataSourceID="SqlDataSource1" 
              OnRowDataBound="GridView1_RowDataBound" 
              ShowFooter="True" AllowPaging="True" PageSize="5" 
              BackColor="#ffffff" BorderColor="AliceBlue" 
              BorderStyle="None" BorderWidth="1px" 
              CellPadding="3" 
              CellSpacing="2" FooterStyle-BackColor="#da821e" 
              FooterStyle-ForeColor="#ffffff" 
              RowStyle-BackColor="#003366" 
              RowStyle-ForeColor="#ffffff" 
              AlternatingRowStyle-BackColor="#da821e">
<Columns>
     <asp:BoundField DataField="ID" HeaderText="ID" 
                     InsertVisible="False" ReadOnly="True"
                     SortExpression="ID" />
     <asp:BoundField DataField="Name" HeaderText="Name" 
                     InsertVisible="False" ReadOnly="True"
                     SortExpression="Name" FooterText="Total"/>
     <asp:TemplateField HeaderText="Amount">
     <ItemTemplate>
     <asp:Label ID="lblAmount" runat="server" 
                Text='<%# "$"+Eval("Amount").ToString()%>'>
     </asp:Label>
     </ItemTemplate>
     <FooterTemplate>
     <asp:Label ID="lblTotal" runat="server"></asp:Label>
     </FooterTemplate>
     </asp:TemplateField>
     </Columns>
     <PagerStyle ForeColor="#8C4510" HorizontalAlign="Center" />
     <HeaderStyle BackColor="#da821e" Font-Bold="True" 
                  ForeColor="White" />
</asp:GridView>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
ConnectionString="<%$ ConnectionStrings:ConnectionString %>"
SelectCommand="SELECT [ID], [Name], [Amount] FROM [Expenses]">
</asp:SqlDataSource>
Now we need to write code for summing the column in RowdataBound Even of GridView

C# code behind
01public partial class _Default : System.Web.UI.Page
02{
03    decimal grdTotal = 0;
04    protected void Page_Load(object sender, EventArgs e)
05    {
06 
07    }
08protected void GridView1_RowDataBound
09                   (object sender, GridViewRowEventArgs e)
10{
11 if (e.Row.RowType == DataControlRowType.DataRow)
12 {
13  decimal rowTotal = Convert.ToDecimal
14              (DataBinder.Eval(e.Row.DataItem, "Amount"));
15  grdTotal = grdTotal + rowTotal;
16 }
17 if (e.Row.RowType == DataControlRowType.Footer)
18 {
19  Label lbl = (Label)e.Row.FindControl("lblTotal");
20  lbl.Text = grdTotal.ToString("c");
21 }
22}
23}

VB.NET code behind

01Public Partial Class _Default
02    Inherits System.Web.UI.Page
03    Private grdTotal As Decimal = 0
04    Protected Sub Page_Load
05    (ByVal sender As Object, ByVal e As EventArgs)
06 
07End Sub
08 
09Protected Sub GridView1_RowDataBound
10(ByVal sender As Object, ByVal e As GridViewRowEventArgs)
11 
12If e.Row.RowType = DataControlRowType.DataRow Then
13Dim rowTotal As Decimal =
14Convert.ToDecimal(DataBinder.Eval(e.Row.DataItem, "Amount"))
15grdTotal = grdTotal + rowTotal
16End If
17 
18If e.Row.RowType = DataControlRowType.Footer Then
19Dim lbl As Label = DirectCast(e.Row.FindControl
20                           ("lblTotal"), Label)
21lbl.Text = grdTotal.ToString("c")
22End If
23End Sub
24End Class