ASP.NET购物车Gridview

时间:2011-07-28 11:14:30

标签: asp.net vb.net shopping-cart

嘿我正在建一家商店(没有付款)

1)选择产品 2)结账 3)确认

选择产品屏幕看起来像将显示的网格视图

名称价格数量 文本文本输入框

因此,假设我每页有10个产品,即每个网格视图有10个数量输入框。

然后我的网格视图下方有两个按钮,即更新和结帐。

现在甚至担心更新。

如何工作,即我必须检查gridview中输入值的每个输入框?

即。有没有任何例子我如何循环通过gridview行检查一个大于0或null的值,例如,如果有一个值,然后执行像

这样的函数

ShoppingCart.Instance.AddItem(5,5)

enter image description here

目前我的Gridview代码

<asp:GridView ID="productListTable" runat="server" DataSourceID="srcProductListPerCustomer" AutoGenerateColumns="False" AlternatingRowStyle-CssClass="tr_dark"  HeaderStyle-CssClass="header_req" BorderWidth="0px" GridLines="None" AllowPaging="true" PageSize="25" EmptyDataText="No records." AllowSorting="true" Width="100%">         
    <Columns>                         
            <asp:TemplateField HeaderText="Product Name" HeaderStyle-Width="130px" SortExpression="productName">
                <ItemTemplate>   
                <asp:Label ID="ProductNameField" runat="server" Text='<%# Eval("productName").ToString() %>'></asp:Label>
                </ItemTemplate>                     
            </asp:TemplateField> 

    </Columns>
    <Columns>                         
            <asp:TemplateField HeaderText="Pack Size" HeaderStyle-Width="70px" SortExpression="packSize">
                <ItemTemplate>  
                <asp:Label ID="PackSizeField" runat="server" Text='<%#  Eval("packSize").ToString()%>'></asp:Label>
                </ItemTemplate>                     
            </asp:TemplateField> 

    </Columns>
    <Columns>                         
            <asp:TemplateField HeaderText="Trade Price" HeaderStyle-Width="130px" SortExpression="address">
                <ItemTemplate>   
                <asp:Label ID="TradePriceField" runat="server" Text='<%#  DisplayMoney(Eval("tradePrice").ToString())%>'></asp:Label>
                </ItemTemplate>                     
            </asp:TemplateField> 

    </Columns>
    <Columns>                         
            <asp:TemplateField HeaderText="Discount" HeaderStyle-Width="60px" SortExpression="discount">
                <ItemTemplate>   
                <asp:Label ID="DiscountField" runat="server" Text='<%# Eval("discount").ToString() %>'></asp:Label>
                </ItemTemplate>                     
            </asp:TemplateField> 

    </Columns>
    <Columns>                         
            <asp:TemplateField HeaderText="Actual Price" HeaderStyle-Width="130px" SortExpression="actualPrice">
                <ItemTemplate>   
                <asp:Label ID="ActualPriceField" runat="server" Text=''></asp:Label>
                </ItemTemplate>                     
            </asp:TemplateField> 

    </Columns>
    <Columns>                         
            <asp:TemplateField HeaderText="Stock" HeaderStyle-Width="130px" SortExpression="stock_indicator">
                <ItemTemplate>   
                <asp:Label ID="StockField" runat="server" Text='<%# DisplayStockLevel(Eval("stock_indicator").ToString()) %>'></asp:Label>
                </ItemTemplate>                     
            </asp:TemplateField> 

    </Columns>
     <Columns>  

    <asp:TemplateField HeaderText="Quantity">
                    <ItemTemplate>
                        <asp:TextBox runat="server" ID="txtQuantity" Columns="5"></asp:TextBox><br />
                        <asp:LinkButton runat="server" ID="btnRemove" Text="Remove" CommandName="Remove" CommandArgument='<%# Eval("product_ID_key") %>' style="font-size:12px;"></asp:LinkButton>
                    </ItemTemplate>
                </asp:TemplateField>
    </Columns>
    <HeaderStyle CssClass="header_req" />
    <AlternatingRowStyle CssClass="tr_dark" />
    <PagerStyle CssClass="pagination" />
    <PagerSettings PageButtonCount="3" FirstPageText="First" LastPageText="Last" NextPageText="Next" PreviousPageText="Previous" Mode="NumericFirstLast" />      
</asp:GridView>

2 个答案:

答案 0 :(得分:1)

将此代码放入您的按钮点击事件中,以遍历productList GridView的每一行并调用ShoppingCart.Instance.AddItem(productId, qty)或您想要的任何其他方法,以更新产品列表及其数量:

For i As Integer = 0 To Me.productListTable.Rows.Count - 1
            Dim txtQuantity As TextBox = CType(productListTable.Rows(i).FindControl("txtQuantity"), TextBox)
            If Not txtQuantity Is Nothing Then
                Dim qty As Integer = 0
                If txtQuantity.Text.Trim() <> String.Empty Then
                    qty = Integer.Parse(txtQuantity.Text.Trim())

                    'get unique id of product - it can be SKU code or whatever that is unique for every product
                    Dim productId As String = productListTable.DataKeys(i).Value

                    'Update product list and quantities
                    ShoppingCart.Instance.AddItem(productId, 5)
                End If
            End If
        Next

如果你注意到ShoppingCart.Instance.AddItem方法,我会传递一个产品ID,所以在代码中我们更新了正确的项目,为了检索这个唯一的密钥,你需要添加DataKeyName属性在GridView代码中,其值等于唯一键的名称...例如: DataKeyNames =“ProductId”

<asp:GridView ID="productListTable" runat="server" DataSourceID="srcProductListPerCustomer" DataKeyNames="ProductId"
        AutoGenerateColumns="False" AlternatingRowStyle-CssClass="tr_dark" HeaderStyle-CssClass="header_req"
        BorderWidth="0px" GridLines="None" AllowPaging="true" PageSize="25" EmptyDataText="No records."
        AllowSorting="true" Width="100%">

答案 1 :(得分:0)

您可以在输入更新数量时使用AJAX更新每一行。一个简单的方法是将GridView包装在UpdatePanel中,然后从那里开始。

更高级的是使用各种其他AJAX方法。

基本方法是循环遍历每个GridView行,获取每个GridView的文本框值,然后根据需要更新购物车。

对于存储方面,商店数据是什么意思?这是所有的产品吗?或只是购物车数据?

如果它只是购物车数据,那么将其放入会话对于小规模网站来说是好的。对于更大规模的站点,您可能希望将其存储在数据库中。