Displaying Summary Information (sum or total) in the GridView's Footer
Challenge
"I have a GridView and I need to show the aggregate sum of a column in the footer row"
Introduction
In this article I will go through steps to enable aggregation sum (total) of a column in the asp.net GridView Footer.
Step1: Prepare Database Connection
In this article I used the AdventureWorks Database and I will query table "PurchaseOrderDetail".
In the web.config set the connection string as following:
<connectionStrings>
<add name="dbconnection" connectionString="Data Source=(local);Integrated Security=true;Initial Catalog=AdventureWorks"/>
</connectionStrings>
Step2: Prepare the aspx Page
|  
 
 <head runat="server"> <title>Displaying Summary Information in the GridView's Footer</title> <style type="text/css"> .Gridview { font-family:Verdana; font-size:10pt; font-weight:normal; color:black;  } </style> </head> <body> <form id="form1"runat="server"> <div> HeaderStyle-ForeColor="White" HeaderStyle-Font-Bold="true" DataKeyNames="ProductID" 
 runat="server" ShowFooter="true" AllowPaging="true" PageSize="5" AutoGenerateColumns="false" 
 DataSourceID="sqldsPurchaseOrderDetail" OnRowDataBound="gvPurchaseOrderDetail_RowDataBound"> 
 <FooterStyle Font-Bold="true" BackColor="#61A6F8" ForeColor="black" /> 
 <Columns> 
   <asp:BoundField DataField="ProductID" HeaderText="Product ID" /> 
   <asp:BoundField DataField="PurchaseOrderDetailID" HeaderText="Purchase Order ID" /> 
   <asp:TemplateField HeaderText="Order Quantity"> 
   <ItemTemplate> 
    <asp:Label ID="lblOrderQty" runat="server" Text='<%#Eval("OrderQty") %>' /> 
   </ItemTemplate> 
   <FooterTemplate> 
    <asp:Label ID="lbltxtTotal" runat="server" Text="Total Price" /> 
   </FooterTemplate> 
   </asp:TemplateField> 
   <asp:TemplateField HeaderText="Price"> 
   <ItemTemplate> 
    <asp:Label ID="lblPrice" runat="server" /> 
   </ItemTemplate> 
   <FooterTemplate> 
    <asp:Label ID="lblTotal" runat="server" /> 
   </FooterTemplate> 
   </asp:TemplateField> 
 </Columns> 
 </asp:GridView> 
 <asp:SqlDataSource ID="sqldsPurchaseOrderDetail" runat="server" SelectCommand="select * from [AdventureWorks].[Purchasing].[PurchaseOrderDetail]" ConnectionString="<%$ ConnectionStrings:dbconnection %>"></asp:SqlDataSource> </div> </form> </body> </html>  | 
Step3: Prepare Code Behind
| 
 decimal total = 0; protected void gvPurchaseOrderDetail_RowDataBound(object sender, GridViewRowEventArgs e) {  if (e.Row.RowType == DataControlRowType.DataRow)  { Label lblPrice = (Label)e.Row.FindControl("lblPrice"); decimal price = Convert.ToDecimal(DataBinder.Eval(e.Row.DataItem, "UnitPrice")) * Convert.ToDecimal(DataBinder.Eval(e.Row.DataItem, "OrderQty")); lblPrice.Text = price.ToString(); total += price;  }  if (e.Row.RowType == DataControlRowType.Footer)  { Label lblTotal = (Label)e.Row.FindControl("lblTotal"); lblTotal.Text = total.ToString();  } }  | 
Result:
