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>
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
Comments
Post a Comment