chrispaton
asked on
How to display gridview summary footer
Hi,
I am trying to display summary total of the 'Price' column in a gridview footer, I have tried to follow the example on www.asp.net turorials section but cannot seem to get this to work with my database. The page loads without any errors and displays the grid with data but does not display any totals in the footer.
Here is the code I am using;
Sql;
SELECT Date, Purchase_Order_number, Job_Number, Price, Invoiced, Paid
FROM dbo.Purchase_Orders
WHERE (Paid = 0)
GridView;
<asp:GridView ID="Postotal" runat="server" AutoGenerateColumns="False "
DataKeyNames="Purchase_Ord er_number" DataSourceID="ObjectDataSo urce1"
ShowFooter="True">
<Columns>
<asp:BoundField DataField="Date" HeaderText="Date" SortExpression="Date" />
<asp:BoundField DataField="Purchase_Order_ number"
HeaderText="Purchase_Order _number" InsertVisible="False" ReadOnly="True"
SortExpression="Purchase_O rder_numbe r" />
<asp:BoundField DataField="Job_Number" HeaderText="Job_Number"
SortExpression="Job_Number " />
<asp:BoundField DataField="Price" HeaderText="Price" SortExpression="Price" />
<asp:CheckBoxField DataField="Invoiced" HeaderText="Invoiced"
SortExpression="Invoiced" />
<asp:CheckBoxField DataField="Paid" HeaderText="Paid" SortExpression="Paid" />
</Columns>
</asp:GridView>
<asp:ObjectDataSource ID="ObjectDataSource1" runat="server"
DeleteMethod="Delete" InsertMethod="Insert"
OldValuesParameterFormatSt ring="orig inal_{0}" SelectMethod="GetPos"
TypeName="accountsTableAda pters.Purc hase_Order sTableAdap ter"
UpdateMethod="Update">
Code Behind;
public partial class CustomFormatting_SummaryDa taInFooter : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
// Class-scope, running total variables...
decimal _totalPrice = 0m;
int _totalNonNullPriceCount = 0;
protected void Postotal_RowDataBound(obje ct sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow )
{
// Reference the ProductsRow via the e.Row.DataItem property
accounts.Purchase_OrdersRo w product = (accounts.Purchase_OrdersR ow)((Syste m.Data.Dat aRowView)e .Row.DataI tem).Row;
// Increment the running totals (if they're not NULL!)
if (!product.IsPriceNull())
{
_totalPrice += product.Price;
_totalNonNullPriceCount++;
}
}
else if (e.Row.RowType == DataControlRowType.Footer)
{
// Display the summary data in the appropriate cells
e.Row.Cells[1].Text = "Total.: " + _totalPrice.ToString();
}
}
}
Thanks
Chris
I am trying to display summary total of the 'Price' column in a gridview footer, I have tried to follow the example on www.asp.net turorials section but cannot seem to get this to work with my database. The page loads without any errors and displays the grid with data but does not display any totals in the footer.
Here is the code I am using;
Sql;
SELECT Date, Purchase_Order_number, Job_Number, Price, Invoiced, Paid
FROM dbo.Purchase_Orders
WHERE (Paid = 0)
GridView;
<asp:GridView ID="Postotal" runat="server" AutoGenerateColumns="False
DataKeyNames="Purchase_Ord
ShowFooter="True">
<Columns>
<asp:BoundField DataField="Date" HeaderText="Date" SortExpression="Date" />
<asp:BoundField DataField="Purchase_Order_
HeaderText="Purchase_Order
SortExpression="Purchase_O
<asp:BoundField DataField="Job_Number" HeaderText="Job_Number"
SortExpression="Job_Number
<asp:BoundField DataField="Price" HeaderText="Price" SortExpression="Price" />
<asp:CheckBoxField DataField="Invoiced" HeaderText="Invoiced"
SortExpression="Invoiced" />
<asp:CheckBoxField DataField="Paid" HeaderText="Paid" SortExpression="Paid" />
</Columns>
</asp:GridView>
<asp:ObjectDataSource ID="ObjectDataSource1" runat="server"
DeleteMethod="Delete" InsertMethod="Insert"
OldValuesParameterFormatSt
TypeName="accountsTableAda
UpdateMethod="Update">
Code Behind;
public partial class CustomFormatting_SummaryDa
{
protected void Page_Load(object sender, EventArgs e)
{
}
// Class-scope, running total variables...
decimal _totalPrice = 0m;
int _totalNonNullPriceCount = 0;
protected void Postotal_RowDataBound(obje
{
if (e.Row.RowType == DataControlRowType.DataRow
{
// Reference the ProductsRow via the e.Row.DataItem property
accounts.Purchase_OrdersRo
// Increment the running totals (if they're not NULL!)
if (!product.IsPriceNull())
{
_totalPrice += product.Price;
_totalNonNullPriceCount++;
}
}
else if (e.Row.RowType == DataControlRowType.Footer)
{
// Display the summary data in the appropriate cells
e.Row.Cells[1].Text = "Total.: " + _totalPrice.ToString();
}
}
}
Thanks
Chris
Have you assigned the RowDataBound event handler to the GridView's RowDataBound event?
Replace your Grid View definition with this.
<asp:GridView ID="Postotal" runat="server" AutoGenerateColumns="False"
DataKeyNames="Purchase_Order_number" DataSourceID="ObjectDataSource1"
ShowFooter="True" onrowdatabound="Postotal_RowDataBound_RowDataBound">
ASKER
I have tried changing the Gridview as suggested but get a compilation error;
does not contain a definition for 'Postotal_RowDataBound_Row DataBound'
I have tried chainging the onrowdatabound to onrowdatabound="Postotal_R owDataBoun d" but still get error does not contain a definition for 'Postotal_RowDataBound'
does not contain a definition for 'Postotal_RowDataBound_Row
I have tried chainging the onrowdatabound to onrowdatabound="Postotal_R
Oops! my mistake. But you have corrected it. What is the compiler error message you get now? I have included the corrected code.
<asp:GridView ID="Postotal" runat="server" AutoGenerateColumns="False"
DataKeyNames="Purchase_Order_number" DataSourceID="ObjectDataSource1"
ShowFooter="True" onrowdatabound="Postotal_RowDataBound">
ASKER
This is the error message;
Compiler Error Message: CS0117: 'ASP.pos_totals_aspx' does not contain a definition for 'Postotal_RowDataBound'
but the Postotal_RowDataBound' does exist in the code.
Compiler Error Message: CS0117: 'ASP.pos_totals_aspx' does not contain a definition for 'Postotal_RowDataBound'
but the Postotal_RowDataBound' does exist in the code.
Can you post the aspx page code and code behind code? If you do not like to post the full code, just the @Page directive of the aspx page and the class definition of the code behind is enough.
ASKER
Here is the code;
I am using Visual Studio 2008 and .net 2.0
I am using Visual Studio 2008 and .net 2.0
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="pos_totals.aspx.cs" Inherits="pos_totals" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
<title>Logs-Purchase Orders</title>
<link href="includes/StyleSheet.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div align="left">
<table width="100%" class="top_bar" cellpadding="5" cellspacing="0">
<tr>
<td>
<img src="images/logo.jpg" />
</td>
</tr>
</table>
</div>
<form id="form1" runat="server">
<div align="left">
<table class="navigation_bar">
<tr>
<td>
<asp:HyperLink ID="HyperLink6" runat="server" NavigateUrl="http://companyweb/default.aspx" class="link-navig">Intranet Home</asp:HyperLink>         
<asp:HyperLink ID="HyperLink2" runat="server" NavigateUrl="~/default.aspx" class="link-navig">Home</asp:HyperLink>         
</td>
<td align="right">
<strong>Accounts</strong>
</td>
</tr>
</table>
</div>
<div>
<table width="100%">
<tr valign="top">
<td width="50" align="left">
<!-- #Include File="includes/tree_navigation.inc" -->
</td>
<td>
<div align="center">
<h3>POs to be Paid</h3>
<br />
<br />
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
DataKeyNames="Purchase_Order_number" DataSourceID="ObjectDataSource1"
ShowFooter="True" onrowdatabound="Postotal_RowDataBound">
<Columns>
<asp:BoundField DataField="Date" HeaderText="Date" SortExpression="Date" />
<asp:BoundField DataField="Purchase_Order_number"
HeaderText="Purchase_Order_number" InsertVisible="False" ReadOnly="True"
SortExpression="Purchase_Order_number" />
<asp:BoundField DataField="Job_Number" HeaderText="Job_Number"
SortExpression="Job_Number" />
<asp:BoundField DataField="Price" HeaderText="Price" SortExpression="Price" />
<asp:CheckBoxField DataField="Invoiced" HeaderText="Invoiced"
SortExpression="Invoiced" />
<asp:CheckBoxField DataField="Paid" HeaderText="Paid" SortExpression="Paid" />
</Columns>
</asp:GridView>
<asp:ObjectDataSource ID="ObjectDataSource1" runat="server"
DeleteMethod="Delete" InsertMethod="Insert"
OldValuesParameterFormatString="original_{0}" SelectMethod="GetPos"
TypeName="accountsTableAdapters.Purchase_OrdersTableAdapter"
UpdateMethod="Update">
<DeleteParameters>
<asp:Parameter Name="Original_Purchase_Order_number" Type="Int32" />
</DeleteParameters>
<UpdateParameters>
<asp:Parameter Name="Date" Type="DateTime" />
<asp:Parameter Name="Job_Number" Type="Int32" />
<asp:Parameter Name="Price" Type="Decimal" />
<asp:Parameter Name="Invoiced" Type="Boolean" />
<asp:Parameter Name="Paid" Type="Boolean" />
<asp:Parameter Name="Original_Purchase_Order_number" Type="Int32" />
</UpdateParameters>
<InsertParameters>
<asp:Parameter Name="Date" Type="DateTime" />
<asp:Parameter Name="Job_Number" Type="Int32" />
<asp:Parameter Name="Price" Type="Decimal" />
<asp:Parameter Name="Invoiced" Type="Boolean" />
<asp:Parameter Name="Paid" Type="Boolean" />
</InsertParameters>
</asp:ObjectDataSource>
</div>
</td>
</tr>
</table>
</div>
</form>
</body>
</html>
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
public partial class pos_totals : System.Web.UI.Page
{
}
public partial class CustomFormatting_SummaryDataInFooter : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
// Class-scope, running total variables...
decimal _totalPrice = 0m;
int _totalNonNullPriceCount = 0;
protected void Postotal_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
// Reference the ProductsRow via the e.Row.DataItem property
accounts.Purchase_OrdersRow product = (accounts.Purchase_OrdersRow)((System.Data.DataRowView)e.Row.DataItem).Row;
// Increment the running totals (if they're not NULL!)
if (!product.IsPriceNull())
{
_totalPrice += product.Price;
_totalNonNullPriceCount++;
}
}
else if (e.Row.RowType == DataControlRowType.Footer)
{
// Display the summary data in the appropriate cells
e.Row.Cells[1].Text = "Total.: " + _totalPrice.ToString();
}
}
}
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
Perfect, it works!!
Thanks for your help jandromeda
Chris
Thanks for your help jandromeda
Chris
ASKER
Thanks for your help, Chris
You are welcome Chris. Happy coding! :)