2011-07-28 18 views
1

ちょっと私は、製品の選択 2)ASP.NETショッピングカートGridViewの

選択製品の画面が見えますチェックアウト 3)確認)

すなわち

1(入金なし)ショップを構築しています

名前価格数 テキストテキスト入力ボックス

つまり、ページあたり10個の商品、つまりグリッドごとに10個の入力ボックスがあるとします。

次に、グリッドビューの下に2つのボタン、つまり更新とチェックアウトがあります。

今すぐ更新することも心配です。

どうすれば、値を入力したgridviewのすべての入力ボックスをチェックする必要がありますか?

I.e.どのように私はループビューを使用してどのように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> 

答えて

1

置き、このコードをShoppingCart.Instance.AddItemメソッドに気付いた、私は正しい商品を更新するコードで渡しているので、このユニークなキーを取得するには、GridViewのタグに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%"> 
+0

クール.................... –

0

で更新された数量に入力すると、あなたはAJAXで、各行を更新することができます。これを行う簡単な方法は、GridViewをUpdatePanelにラップし、そこから移動することです。

さらに高度なAJAXのさまざまな方法を使用することです。

基本的な方法は、各GridView行をループし、それぞれのテキストボックスの値を取得し、必要に応じてカートを更新することです。

ストレージ側については、ショップデータはどういう意味ですか?これはすべての製品ですか?または単にカートのデータですか?

カートのデータだけの場合は、これをセッションに入れることは、小規模なサイトでは問題ありません。大規模なサイトでは、これをデータベースに格納することを検討したいと考えています。

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 

お持ちの場合:あなたのproductListGridViewの各行を反復処理し、製品リストとその量を更新するために、ShoppingCart.Instance.AddItem(productId, qty)またはその他の必要なメソッドを呼び出すためにあなたのボタンクリックイベントで

+0

ねえ、私はカートのデータを格納することを意味ええ、すなわち、ユーザが選択したアイテム。セッションでこれを保存するにはどうすればいいですか?つまり、注文と注文行をセッションに保存するにはどうすればよいですか? – StevieB

+0

よくセッションに何かを保存することができます。 'Session(" YourUniqueSessionName ")= Cart'' Cart'はデータセット、オブジェクトなどである可能性があります。 –

+0

私はこれを見つけようとしましたが、セッション中にショッピングカートを保管するという良い例は見つかりませんでした。私。ショッピングカートセッションに個々の注文ラインを追加する方法と、それらをループするデータを取得する方法 – StevieB