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.
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>
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_RowDataBound09 (object sender, GridViewRowEventArgs e)10{11 if (e.Row.RowType == DataControlRowType.DataRow)12 {13 decimal rowTotal = Convert.ToDecimal14 (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 _Default02 Inherits System.Web.UI.Page03 Private grdTotal As Decimal = 004 Protected Sub Page_Load05 (ByVal sender As Object, ByVal e As EventArgs)06 07End Sub08 09Protected Sub GridView1_RowDataBound10(ByVal sender As Object, ByVal e As GridViewRowEventArgs)11 12If e.Row.RowType = DataControlRowType.DataRow Then13Dim rowTotal As Decimal = 14Convert.ToDecimal(DataBinder.Eval(e.Row.DataItem, "Amount"))15grdTotal = grdTotal + rowTotal16End If17 18If e.Row.RowType = DataControlRowType.Footer Then19Dim lbl As Label = DirectCast(e.Row.FindControl20 ("lblTotal"), Label)21lbl.Text = grdTotal.ToString("c")22End If23End Sub24End Class