and this my cart page....
<%@ Page Title="" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true"
CodeBehind="Checkout.aspx.cs" Inherits="SessionShoppingCart.Checkout" %>
<asp:Content ID="Content1" ContentPlaceHolderID="HeadContent" runat="server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<asp:GridView ID="Basket" runat="server" AutoGenerateColumns="False" GridLines="None"
EnableViewState="False" ShowFooter="True" DataKeyNames="ProductID" OnRowCreated="Basket_RowCreated">
<Columns>
<asp:TemplateField HeaderText="Remove">
<ItemTemplate>
<asp:CheckBox ID="RemovedProducts" runat="server" />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Product" SortExpression="ProductName">
<ItemTemplate>
<asp:Label ID="ProductName" runat="server" Text='<%# Eval("ProductName") %>' />
</ItemTemplate>
<FooterTemplate>
<strong>Total Price: </strong>
</FooterTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Price" SortExpression="UnitPrice">
<ItemTemplate>
<asp:Label ID="UnitPrice" runat="server" Text='<%# Eval("UnitPrice", "{0:c}") %>' />
</ItemTemplate>
<FooterTemplate>
<strong>
<asp:Literal ID="TotalPrice" runat="server" />
</strong>
</FooterTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
<asp:Button ID="RemoveProduct" runat="server" Text="Remove From Basket" OnClick="RemoveProduct_Click" />
<asp:Button ID="ConfirmPurchase" runat="server" Text="Confirm Purchase" />
<asp:SqlDataSource ID="BasketData" runat="server"
ConnectionString="<%$ ConnectionStrings:NorthwindConnectionString %>">
</asp:SqlDataSource>
</asp:Content>
and this is my .cs page
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
namespace SessionShoppingCart
{
public partial class Checkout : System.Web.UI.Page
{
Decimal cost;
protected void Page_Load(object sender, EventArgs e)
{
if (Session["Cart"] == null)
Response.Redirect("ShoppingCart.aspx");
BindBasket();
}
protected void RemoveProduct_Click(object sender, EventArgs e)
{
var cart = (List<string>)Session["Cart"];
var removedProducts = Basket.Rows.Cast<GridViewRow>()
.Where(row => ((CheckBox)row.FindControl("RemovedProducts")).Checked)
.Select(row => Basket.DataKeys[row.RowIndex].Value.ToString()).ToList();
cart.RemoveAll(removedProducts.Contains);
BindBasket();
}
protected void BindBasket()
{
var sql = "SELECT ProductID, ProductName, UnitPrice FROM Products WHERE ProductID IN ({0})";
var values = (List<string>)Session["Cart"];
if (values.Count > 0)
{
var parms = values.Select((s, i) => "@p" + i.ToString()).ToArray();
var inclause = string.Join(",", parms);
BasketData.SelectCommand = string.Format(sql, inclause);
BasketData.SelectParameters.Clear();
for (var i = 0; i < parms.Length; i++)
{
BasketData.SelectParameters.Add(parms[i].Replace("@", ""), values[i]);
}
DataView view = (DataView)BasketData.Select(DataSourceSelectArguments.Empty);
var costQuery = view.Cast<DataRowView>().Select(drv => drv.Row.Field<decimal>("UnitPrice"));
cost = costQuery.Sum();
Basket.DataSource = view;
Basket.DataBind();
}
}
protected void Basket_RowCreated(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.Footer)
{
Literal total = (Literal)e.Row.FindControl("TotalPrice");
total.Text = cost.ToString("c");
}
}
}
}