ASP.NET Корзина Gridview - PullRequest
       14

ASP.NET Корзина Gridview

1 голос
/ 28 июля 2011

Эй, я строю магазин (без оплаты)

т.е.

1) Выберите товары 2) Оформить заказ 3) Подтверждение

Экран выбора товаров будет выглядеть каксетка, которая будет отображать

имя цена количество Текстовое поле ввода текста

Итак, скажем, у меня есть 10 продуктов на страницу, то есть 10 полей ввода количества на сетку.

И затемУ меня есть 2 кнопки под моим видом сетки, то есть «Обновление и проверка».

Пока я даже беспокоюсь об обновлении.

Как это может работать, т. Е. Придется ли мне проверять каждое поле ввода в виде сетки, для которогобыло введено значение?

Т.е. есть ли какой-нибудь пример того, как я могу выполнить циклическую проверку строки таблицы для значения, например, больше 0 или нуля, и, если есть значение, выполнить такую ​​функцию, как

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 ]

1 голос
/ 05 августа 2011

Поместите этот код в событие нажатия кнопки, чтобы выполнить итерацию по каждой строке вашего 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 есть идентификатор продукта, который я передаю, поэтому в коде мы обновляем правильный элемент, чтобы получить этот уникальный ключ, вам нужно добавить свойство 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%">
0 голосов
/ 28 июля 2011

Вы можете обновить каждую строку с помощью AJAX при вводе обновленного количества.Простой способ сделать это - обернуть GridView в UpdatePanel, а затем перейти оттуда.

Более продвинутым было бы использование различных других методов AJAX.

Основной способ, хотябыло бы перебрать каждую строку GridView, получить значение текстового поля для каждого, а затем обновить корзину, если необходимо.

Что касается хранилища, что вы подразумеваете под данными магазина?Это все продукты?или только данные корзины?

Если это просто данные корзины, то поместить их в сеанс хорошо для небольшого сайта.Для более крупного сайта вы бы хотели сохранить его в базе данных.

...