【问题标题】:ASP.NET Shopping Cart GridviewASP.NET 购物车网格视图
【发布时间】:2011-10-15 00:58:45
【问题描述】:

嘿,我正在开一家商店(无需付款)

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

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

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

也就是说,假设我每页有 10 个产品,即每个 gridview 有 10 个数量输入框。

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

现在只是担心更新。

这怎么能工作,即我是否必须检查 gridview 中输入值的每个输入框?

即有没有什么例子我可以循环通过gridview行检查一个大于0或null的值,例如,如果有一个值,那么执行一个类似的函数

ShoppingCart.Instance.AddItem(5, 5)

我现在的 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>

【问题讨论】:

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


    【解决方案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,因此在代码中我们更新了正确的项目,为了检索这个唯一键,您需要在您的@987654327 中添加DataKeyName 属性@ 标签的值等于唯一键的名称... 例如: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%">
    

    【讨论】:

      【解决方案2】:

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

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

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

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

      如果只是购物车数据,那么将其放入会话中对于小型站点来说是可以的。对于较大规模的站点,您可能需要考虑将其存储在数据库中。

      【讨论】:

      • 嘿,我的意思是存储购物车数据,是的,即用户选择的项目。如何将其存储在会话中,即如何将 Order 和 Orderlines 存储在会话中?
      • 您可以在会话中存储任何内容。 Session("YourUniqueSessionName") = Cart Cart 可以是数据集、对象等...
      • 我尝试用谷歌搜索,但找不到任何在会话中存储购物车的好例子。 IE。如何将单个订单行添加到购物车会话以及在检索数据时循环遍历它们
      • 好吧,对于基础知识,请研究将数据存储在数据集中。然后将数据集存储在会话中。数据集是数据表的集合,因此您可以轻松地将数据存储在此处。
      • @NitinJS 你不能在没有给出理由的情况下说“不要”使用某些东西。使用会话变量绝对没有错,那你为什么不使用它们呢?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多