Duwamish7分析——购物车

购物车显示用户已经选择购买的图书。它还提供选项修改每本选中的图书的数量。
实现
“Shopping Cart”(购物车)页使用下面的 ASP.NET 文件和 C# 或 Visual Basic .NET 代码隐藏文件:
ShoppingCart.aspx
ShoppingCart.aspx.cs
ShoppingCart.aspx.vb
注意   有关 ASP.NET 代码隐藏的更多信息,请参见创建 ASP.NET Web 应用程序。
过程概述
用户从 ASP.NET 页顶部选择购物车选项或者在图书选区选择“Add To Cart”(添加到购物车)按钮后,应用程序显示“Shopping Cart”(购物车)页。若要继续运行到结帐,用户须单击“Proceed to Checkout”(前进到结帐)链接。有关更多信息,请参见结帐。在购物车中,用户可以修改每本选中图书的数量。当用户单击“Update”(更新)按钮时,Duwamish7.Web.ShoppingCart.UpdateButton_Click 方法调用 Duwamish7.Web.Cart.UpdateItems 方法更改数量。(每项所允许的最大数量为 50。)当用户输入的数量为零时,Duwamish7.Web.Cart.UpdateItems 方法还处理图书的删除操作。
结构决策
从 Web 层没有处理购物车管理的调用,因此可伸缩性和性能都得到了提高。这种方法的不利因素是如果会话状态超时,购物车可能丢失。另一种方法是退出购物车返回 SQL。有关 Duwamish 7.0 中的会话状态的进一步信息,请参见用户服务。
Web 源代码
Duwamish7.Web.ShoppingCart.UpdateButton_Click 方法源代码的默认位置是 [安装 Visual Studio .NET 的驱动器号]:/Program Files/Microsoft Visual Studio .NET 2003/Enterprise Samples/Duwamish 7.0 CS/Web/ShoppingCart.aspx.cs 文件。Duwamish7.Web.Cart.UpdateItems 方法源代码的默认位置是 [安装 Visual Studio .NET 的驱动器号]:/Program Files/Microsoft Visual Studio .NET 2003/Enterprise Samples/Duwamish 7.0 CS/Web/Cart.cs 文件。
注意   如果安装了 Visual Basic .NET 版本,则 Duwamish 7.0 VB 将替换路径中的 Duwamish 7.0 CS,其文件名相同,但扩展名是 vb 而不是 cs。
Duwamish7.Web.ShoppingCart.UpdateButton_Click 方法:
[C#]
/// <summary>
///     Update the quantity of item(s) in the shopping cart and then display the contents
///     of the cart.
///     <param name="sender">The source of the event.</param>
///     <param name="e">An EventArgs that contains the event data.</param>
/// </summary>
public void UpdateButton_Click(Object sender, EventArgs e)
{
    bool cartHasItems = false;       //Set if the cart contains items

    Cart shoppingCart = ShoppingCart(false);
    if (!shoppingCart.IsEmpty)
    {
        if (!Page.IsValid)
        {
            return;
        }
   
        //
        // Validators have run so we can assume valid input
        //
       
        //
        // reset the quanities for all the items in cart
        //
        DataRowCollection orderRows = shoppingCart.OrderItems.Rows;
        int i = 0;
        foreach (DataGridItem item in CartItemsDataGrid.Items)
        {
            //update the quantity
            orderRows[i][1] = Int32.Parse(((TextBox)item.FindControl("QuantityTextBox")).Text);
            ++i;
        }
       
        shoppingCart.UpdateItems();
       
        cartHasItems = !shoppingCart.IsEmpty;
        if (cartHasItems)
        {
            //Bind the DataGrid to the items
            CartItemsDataGrid.DataSource = (ICollection)shoppingCart.OrderItems.DefaultView;
            CartItemsDataGrid.DataBind();
        }
    }
   
    //
    // Set visibility of displayed items to correspond to
    //   whether or not we have items in the cart.
    //
    ShoppingCartPanel.Visible = cartHasItems;
    CartItemsDataGrid.Visible = cartHasItems;
    CheckOutHyperLink.Visible= cartHasItems;
    EmptyCartLabel.Visible = !cartHasItems;
}
[Visual Basic .NET]
'----------------------------------------------------------------
' Sub UpdateButton_click:
'   Update the quantity of item(s) in the shopping cart and then display the contents
'     of the cart
' Parameters:
'   [in] sender: not used
'   [in] e: not used
'----------------------------------------------------------------
Private Sub UpdateButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
    Dim cartHasItems As Boolean  'Set if the cart contains items
    Dim i As Integer      'loop index
    Dim quantityString as String 'used for conversion checks
    Dim quantity as Integer 'used to set the items updated quanity
    Dim item As DataGridItem    'used to access the individual grid items
    Dim quantityTextBox As TextBox  'used to access the individual TextBoxes
    Dim row As DataRow 'used to access the individual DataRows

    With ShoppingCart(False)
        If Not .IsEmpty Then
           
            If Not Page.IsValid Then
                Return
            End If
       
            '
            ' Validators have run so we can assume valid input
            '
           
            '
            ' reset the quanities for all the items in cart
            '
            For i = 0 To CartItemsDataGrid.Items.Count - 1
                item = CartItemsDataGrid.Items(i)
                quantityTextBox = CType(Item.FindControl("QuantityTextBox"), TextBox)
                quantityString = quantityTextBox.Text
                quantity = CInt(quantityString)
                row = .OrderItems.Rows(i)
                'update the quantity
                row(1) = quantity
            Next i
           
            .UpdateItems()
           
            cartHasItems = Not .IsEmpty
            If cartHasItems Then
                'Bind the DataGrid to the items
                CartItemsDataGrid.DataSource = CType(.OrderItems.DefaultView, System.Collections.ICollection)
                CartItemsDataGrid.DataBind
            End If                   
        End If
    End With
   
    '
    ' Set visibility of displayed items to correspond to
    '   whether or not we have items in the cart.
    '
    ShoppingCartPanel.Visible = cartHasItems
    CartItemsDataGrid.Visible = cartHasItems
    CheckOutHyperLink.Visible= cartHasItems
    EmptyCartLabel.Visible = Not cartHasItems
End Sub
Duwamish7.Web.Cart.UpdateItems 方法:
[C#]
/// <summary>
///     Updates the Items in the shopping cart.
/// </summary>
public void UpdateItems()
{
    int quantity;
    int itemsCount = OrderItems.Rows.Count;
    DataRow row;
   
    for (int i = 0; i < itemsCount; i++)
    {
        row = OrderItems.Rows[i];
        quantity = Int32.Parse(row[OrderData.QUANTITY_FIELD].ToString());
        if (quantity < 1)
        {
            row.Delete();
            itemsCount--;
            i--;
        }
        else
        {
            row[OrderData.EXTENDED_FIELD] = (Decimal)row[OrderData.PRICE_FIELD] * quantity;
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值