Tuesday, 31 January 2012

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 footer row or footer template of GridView 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>
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

Hope this helps

No comments:

Post a Comment

Note: only a member of this blog may post a comment.