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
01
public
partial
class
_Default : System.Web.UI.Page
02
{
03
decimal
grdTotal = 0;
04
protected
void
Page_Load(
object
sender, EventArgs e)
05
{
06
07
}
08
protected
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
01
Public
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
07
End
Sub
08
09
Protected
Sub
GridView1_RowDataBound
10
(
ByVal
sender
As
Object
,
ByVal
e
As
GridViewRowEventArgs)
11
12
If
e.Row.RowType = DataControlRowType.DataRow
Then
13
Dim
rowTotal
As
Decimal
=
14
Convert.ToDecimal(DataBinder.Eval(e.Row.DataItem,
"Amount"
))
15
grdTotal = grdTotal + rowTotal
16
End
If
17
18
If
e.Row.RowType = DataControlRowType.Footer
Then
19
Dim
lbl
As
Label =
DirectCast
(e.Row.FindControl
20
(
"lblTotal"
), Label)
21
lbl.Text = grdTotal.ToString(
"c"
)
22
End
If
23
End
Sub
24
End
Class
Hope this helps
Other gridview articles:
Populating dropdown based on the selection of first drop down in DetailsView using FindControl and ItemTemplate
Pouplating Multiple DetailsView based on single GridView using DataKeyNames
Merging GridView Headers to have multiple Headers in GridView
Search Records In GridView And Highlight Results Using AJAX ASP.NET
Insert update Delete record in GridView using SqlDataSource ItemTemplate and EditItemTemplate
If you like this post than join us or share
24 comments:
thanks for the code
Good collection
see this blogs. I liked this blog, it has lots of
nice articles
http://aspnetcsharp4.blogspot.com/
This will not work for a paged gridview with more rows than the maximum per page. It can only show the total for the page. However, if the accumulator variable is only zeroed out in the
!Page.IsPostBack then the totals can accumulate but only based on the pages selected so any value could be created for the total depending on the pages selected. Therefore, there is no way to get a running total in a paged gridview.
It was very interesting for me to read the post. Thank you for it. I like such themes and anything connected to this matter. I would like to read a bit more on that blog soon.
Can any1 tell me how to do running total with the Paging on couse in this solution Total gets 0 when page changes.....
plz....send download like........
Pretty interesting site you've got here. Thank you for it. I like such themes and anything that is connected to them. I would like to read more on that blog soon.
Truly yours
Alice Tudes
Hi sir,
your blog is among the best blogs available around on net.
today i came across a strange problem
i have a datagrid with paging enabled in asp.net which have to be populated with huge data(above 10000) records.
and i have to show in footer the record count on each page and total records present
like
1-50 of 10000
51-100 of 10000
i searched whole google in 2 days but couldn't found any solution for.
so thought to ask you for that.
please revert with your great expertise on the topic
thanks & regards
alok aggarwal
alokagga@gmail.com
Awesome contribution, works excellent!
Have a little request, i have 2 columns that have the sum in the footer, i need another one to make a substraction of the 2 columns.
like this
SumCol1=250 SumCol2=125 Balance=375
Any ideas?
kalyan said
counting no total no rows knowing
label1.Text=GridView1.Rows.Count; how to count them when gridview created dynamically
jai matadi .. great tutorial dude ..
i would like to use this code in VB.NET for projects coz i have made that sought of programme will it be possible .. plz let me know ..
mitt
hello, how is everyone right here? I am a new comer to this amazing online community. Hope to get new buddies and discover something right here.
hi,
its nice ..............
thanx for this code..................
100% CORRECT! THANKS BRO (^^,)
Dear Friend
I want to change currency symbol from $ to Rs.
I am unable to change it from footer total.
Please help.
Thanks
@Above:
Plz look for code mentioned bolow in html source of gridview.
HeaderText="Amount"
Text='<%# "$"+Eval("Amount").ToString()%>'
Now change the $ sign to whatever you like.
It is not working in my project.. all field are show but not add show as below
100
140
120
in footer Total 100140120
please help me..........!
@Sunder: Have you written grdTotal = grdTotal + rowTotal; in rowDataBound And convert it to decimal ?
decimal rowTotal = Convert.ToDecimal
14
(DataBinder.Eval(e.Row.DataItem, "Amount"));
Your values are not converted to decimal so are getting append because of string type
Thank you very much for the code
I get no errors, which is fabulous, because all of the other examples I have found create pages and pages of errors. Sadly, I do not get a Total Either.
The GridView:
As above in example.
The Code Behind it:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Data.SqlClient;
namespace AudioNET
{
public partial class DemoInvStockVal : System.Web.UI.Page
{
decimal grdTotal = 0;
protected void Page_Load(object sender, EventArgs e)
{
}
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
decimal rowTotal = Convert.ToDecimal
(DataBinder.Eval(e.Row.DataItem, "VALUE"));
grdTotal = grdTotal + rowTotal;
}
if (e.Row.RowType == DataControlRowType.Footer)
{
Label lbl = (Label)e.Row.FindControl("lblTotal");
lbl.Text = grdTotal.ToString("c");
}
}
}
}
Narayana said: it is very helpful but i want to write a code in gridview footer button.. please help me.. how can give action to gridview footer button.
@Above: plz refer Insert Edit Delete In GridView to know how to add button in gridview footer
i want full total at the end of each paging,no need of running pages column total,that is my problem..
Post a Comment