<%@ Register TagPrefix="uc1" TagName="Header" Src="UserControls/Header.ascx" %>
<%@ Page language="c#" Inherits="ASPNETSZ4.ShoppingCart" CodeFile="ShoppingCart.aspx.cs" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>
<% = pub.sTitle %>
</title>
<meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
<meta name="CODE_LANGUAGE" Content="C#">
<meta name="vs_defaultClientScript" content="JavaScript">
<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
<LINK href="Style.css" type="text/css" rel="stylesheet">
</HEAD>
<body>
<form id="Form1" method="post" runat="server">
<uc1:header id="Header1" runat="server"></uc1:header>
<TABLE cellSpacing="0" cellPadding="0" width="100%" align="center" border="0">
<TR>
<TD>
<TABLE cellSpacing="0" cellPadding="0" width="100%" border="0">
<TR>
<TD vAlign="top" width="200"></TD>
<td width="2"></td>
<TD vAlign="top" align="middle">
<table cellSpacing="0" cellPadding="0" width="98%">
<tr>
<td background="Images/BannerBGOrange.gif" height="26"> 購物清單列表</td>
<td background="Images/BannerBGOrange.gif" align="right"><asp:label id="lbMsg" runat="server" ForeColor="Red"></asp:label></td>
</tr>
</table>
<asp:Panel id="Panel1" runat="server">
<asp:datagrid id="DataGrid1" runat="server" DataKeyField="ProductID" AutoGenerateColumns="False" Width="98%" BorderColor="#CC9966" BorderStyle="None" BorderWidth="1px" BackColor="White" CellPadding="4">
<SelectedItemStyle Font-Bold="True" ForeColor="#663399" BackColor="#FFCC66"></SelectedItemStyle>
<AlternatingItemStyle BackColor="Cornsilk"></AlternatingItemStyle>
<ItemStyle ForeColor="#330099" BackColor="White"></ItemStyle>
<HeaderStyle Font-Bold="True" HorizontalAlign="Center" ForeColor="#FFFFCC" BackColor="#990000"></HeaderStyle>
<FooterStyle ForeColor="#330099" BackColor="#FFFFCC"></FooterStyle>
<Columns>
<asp:TemplateColumn Visible="False" HeaderText="貨號">
<ItemTemplate>
<asp:Label id=lbProductID runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "ProductID") %>' Visible="false">
</asp:Label>
</ItemTemplate>
</asp:TemplateColumn>
<asp:BoundColumn DataField="ModelNumber" HeaderText="規格型號"></asp:BoundColumn>
<asp:BoundColumn DataField="ModelName" HeaderText="商品名稱"></asp:BoundColumn>
<asp:TemplateColumn HeaderText="數量">
<ItemTemplate>
<asp:TextBox id=txtQuantity runat="server" BorderStyle="Dotted" BorderWidth="1px" Text='<%# DataBinder.Eval(Container.DataItem, "Quantity") %>' ToolTip="雙擊後直接修改數量" Columns="4" MaxLength="3" width="100%">
</asp:TextBox>
</ItemTemplate>
</asp:TemplateColumn>
<asp:BoundColumn DataField="UnitCost" HeaderText="單價" DataFormatString="{0:c}">
<ItemStyle HorizontalAlign="Right"></ItemStyle>
</asp:BoundColumn>
<asp:BoundColumn DataField="ExtendedAmount" HeaderText="小計" DataFormatString="{0:c}">
<ItemStyle HorizontalAlign="Right"></ItemStyle>
</asp:BoundColumn>
<asp:TemplateColumn HeaderText="刪">
<ItemTemplate>
<DIV align="center">
<asp:CheckBox id="cbRemove" runat="server"></asp:CheckBox></DIV>
</ItemTemplate>
</asp:TemplateColumn>
</Columns>
<PagerStyle HorizontalAlign="Center" ForeColor="#330099" BackColor="#FFFFCC"></PagerStyle>
</asp:datagrid>
<TABLE cellSpacing="0" cellPadding="0" width="98%">
<TR>
<TD align="middle" background="Images/BannerBGOrange.gif" height="26">
<asp:Button id="Button1" runat="server" BorderStyle="None" BorderWidth="1px" BackColor="Transparent" Text="√全部選中" onclick="Button1_Click"></asp:Button></TD>
<TD align="middle" background="Images/BannerBGOrange.gif" height="26">
<asp:Button id="Button2" runat="server" BorderStyle="None" BorderWidth="1px" BackColor="Transparent" Text="□全部取消" onclick="Button2_Click"></asp:Button></TD>
<TD align="right" background="Images/BannerBGOrange.gif" height="26">合計金額:
</TD>
<TD align="right" background="Images/BannerBGOrange.gif" height="26">
<asp:label id="lbTotal" runat="server" EnableViewState="false"></asp:label></TD>
</TR>
</TABLE>
<BR>
<TABLE cellSpacing="0" cellPadding="0" align="center" border="0">
<TR>
<TD align="middle">
<asp:ImageButton id="ImageButton1" runat="server" ImageUrl="Images/UpdateCart.gif"></asp:ImageButton></TD>
<TD align="middle" width="10"></TD>
<TD align="middle">
<asp:ImageButton id="ImageButton2" runat="server" ImageUrl="Images/CheckOut.gif"></asp:ImageButton></TD>
</TR>
</TABLE>
</asp:Panel>
</TD>
</TR>
</TABLE>
</TD>
</TR>
</TABLE>
<uc1:footer id="Footer1" runat="server"></uc1:footer>
</form>
</body>
</HTML>
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
namespace ASPNETSZ4
...{
/**//// <summary>
/// Summary description for ShoppingCart.
/// </summary>
public partial class ShoppingCart : System.Web.UI.Page
...{
protected Pub pub = new Pub();
protected void Page_Load(object sender, System.EventArgs e)
...{
//put user code to initialize the page here
if (Page.IsPostBack == false)
...{
BindData();
}
}
/**//// <summary>
/// bind data
/// </summary>
void BindData()
...{
String CartID = pub.GetShoppingCartID();
DataGrid1.DataSource = pub.spShoppingCartList(CartID);
DataGrid1.DataBind();
DispInfo();
}
/**//// <summary>
/// display info about shopping cartId
/// </summary>
void DispInfo()
...{
//當前用戶的購物車ID
String CartID = pub.GetShoppingCartID();
//lsMsg 用來顯示購物車的信息
if (DataGrid1.Items.Count == 0)
...{
lbMsg.Text = pub.SiteName + " -- 購物清單 -- 暫時爲空 -- 請繼續購物 ";
Panel1.Visible = false;
}
else
...{
lbMsg.Text = pub.SiteName + " -- 購物清單 -- 共有 " + DataGrid1.Items.Count.ToString() + " 個記錄 -- 請繼續購物 ";
Panel1.Visible = true;
//<asp:BoundColumn DataField="ExtendedAmount" HeaderText="小計" DataFormatString="{0:c}">
lbTotal.Text = String.Format( "{0:c}", pub.spShoppingCartTotal(CartID));
}
}
/**//// <summary>
/// update shoppingCart data
/// </summary>
void ShoppingCartUpdate()
...{
String CartID = pub.GetShoppingCartID();
// 遍歷 DataGird1 裏的 txtQuantity 與 cbRemove 值
for (int i=0; i<DataGrid1.Items.Count; i++)
...{
// 獲取相關值
//CheckBoxList.FindControl 在當前的命名容器中搜索指定的服務器控件。
TextBox TxtQuantity = (TextBox) DataGrid1.Items[i].FindControl("txtQuantity");
CheckBox cbRemove = (CheckBox) DataGrid1.Items[i].FindControl("cbRemove");
int iQty;
// 保護異常
try
...{
iQty = Int32.Parse(TxtQuantity.Text);
// 如果數量改變或者選中
if (iQty != (int)DataGrid1.DataKeys[i] || cbRemove.Checked == true)
...{
Label lbProductID = (Label) DataGrid1.Items[i].FindControl("lbProductID");
if (iQty == 0 || cbRemove.Checked == true)
...{
pub.spShoppingCartRemoveItem(CartID, Int32.Parse(lbProductID.Text));
}
else
...{
pub.spShoppingCartUpdateQty(CartID, Int32.Parse(lbProductID.Text), iQty);
}
}
}
catch
...{
lbMsg.Text = "系統提示: 您剛纔至少有一處有輸入錯誤.";
}
}
}
Web Form Designer generated code#region Web Form Designer generated code
override protected void OnInit(EventArgs e)
...{
//
// CODEGEN: This call is required by the ASP.NET Web Form Designer.
//
InitializeComponent();
base.OnInit(e);
}
/**//// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
...{
this.ImageButton1.Click += new System.Web.UI.ImageClickEventHandler(this.ImageButton1_Click);
this.ImageButton2.Click += new System.Web.UI.ImageClickEventHandler(this.ImageButton2_Click);
}
#endregion
/**//// <summary>
/// update shopping Cart count
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void ImageButton1_Click(object sender, System.Web.UI.ImageClickEventArgs e)
...{
ShoppingCartUpdate();
BindData();
}
/**//// <summary>
/// pay out money to shopping cart
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void ImageButton2_Click(object sender, System.Web.UI.ImageClickEventArgs e)
...{
ShoppingCartUpdate();
if (DataGrid1.Items.Count > 0)
// 付款結帳前, 再次檢查是否非空購物車, 然後並沒作過多的處理, 而是直接轉向訂單確認頁面
Response.Redirect("Checkout.aspx");
else
lbMsg.Text = "系統提示: 您當前的購物清單是空的, 所以, 您還無需進行結帳付款.";
}
/**//// <summary>
/// 購買 的商品全部選中然後計算總價值
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void Button1_Click(object sender, System.EventArgs e)
...{
for(int i=0; i<DataGrid1.Items.Count; i++)
...{
((CheckBox)DataGrid1.Items[i].Cells[0].FindControl("cbRemove")).Checked = true;
}
DispInfo();
}
/**//// <summary>
/// 購買 的商品全部取消,然後檢驗購物車的總價數
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void Button2_Click(object sender, System.EventArgs e)
...{
for(int i=0; i<DataGrid1.Items.Count; i++)
...{
((CheckBox)DataGrid1.Items[i].Cells[0].FindControl("cbRemove")).Checked = false;
}
DispInfo();
}
}
}
此購物清單的設計要點:
1.頁面的加載爲Page.isPostBack
2.DataBind method
3.購物車信息的顯示函數
要注意這種寫法:
if (DataGrid1.Items.Count == 0)
{
lbMsg.Text = pub.SiteName + " -- 購物清單 -- 暫時爲空 -- 請繼續購物 ";
Panel1.Visible = false;
}
else
{
lbMsg.Text = pub.SiteName + " -- 購物清單 -- 共有 " + DataGrid1.Items.Count.ToString() + " 個記錄 -- 請繼續購物 ";
Panel1.Visible = true;
//<asp:BoundColumn DataField="ExtendedAmount" HeaderText="小計" DataFormatString="{0:c}">
lbTotal.Text = String.Format( "{0:c}", pub.spShoppingCartTotal(CartID));
}
4.更新購物車的數據。
//CheckBoxList.FindControl 在當前的命名容器中搜索指定的服務器控件。
TextBox TxtQuantity = (TextBox) DataGrid1.Items[i].FindControl("txtQuantity");
CheckBox cbRemove = (CheckBox) DataGrid1.Items[i].FindControl("cbRemove");
5.更新購物車中商品的數量和總錢數,此處是用二個Image button 來實現的。具體參照上面的代碼
6.對選中商品和清空商品的處理
就是二個BUTTON的事件程序
雅琦