Статьи

Создание корзины покупок ASP.NET с использованием статьи DataTables

Шаг 3: Создание функции добавления в корзину

Теперь, когда структура DataTable полностью построена, мы хотим начать добавлять в корзину определенные элементы, которые пользователь выбирает из выпадающего меню. Опять же, чтобы сделать это, мы просто создаем новые строки и добавляем их в соответствующую позицию в корзине DataTable . Чтобы создать функцию «Добавить в корзину», добавьте код ниже:

 Sub AddToCart(s As Object, e As EventArgs)      objDT = Session("Cart")     Dim Product = ddlProducts.SelectedItem.Text      objDR = objDT.NewRow     objDR("Quantity") = txtQuantity.Text     objDR("Product") = ddlProducts.SelectedItem.Text     objDR("Cost") = Decimal.Parse(ddlProducts.SelectedItem.Value)     objDT.Rows.Add(objDR)     Session("Cart") = objDT      dg.DataSource = objDT     dg.DataBind()   End Sub 

Вы помните, что элемент управления Button имел событие AddToCart() которое AddToCart() подпрограмму AddToCart() . Эта подпрограмма содержит весь код, необходимый для извлечения существующей корзины из объекта Session если он существует, добавления новых элементов в корзину, помещения корзины обратно в сеанс и, наконец, привязки к DataGrid.

Как я уже упоминал, первые две строки кода извлекают корзину из сеанса, если она существует, и извлекают продукт, выбранный из раскрывающегося меню. Поскольку вы уже создали новый экземпляр класса DataRow , вы можете создать новые строки для определенных столбцов в DataTable.

Вы заметите, что мы установили столбец Quantity равный значению элемента управления текстового поля количества, и установили столбец Product равный текстовому значению выпадающего меню. Затем мы преобразуем значение раскрывающегося меню, которое представляет собой стоимость, в десятичное значение для столбца стоимости. Наконец, мы добавляем новую строку в DataTable, добавляем DataTable в сеанс или перезаписываем его, если он уже существует, и привязываем DataTable к DataGrid.

Проверьте, что у вас есть в браузере. Должно работать нормально, кроме одной проблемы. Вы увидите, что если вы выберете товар, добавите его в корзину, а затем снова выберите тот же товар, вместо добавления суммы старого количества к новому количеству, он просто создаст новую строку. Вы можете решить эту проблему, изменив подпрограмму AddToCart() . Чуть ниже кода, из которого вы извлекаете элемент из выпадающего меню, добавьте следующий цикл, чтобы проверить в DataTable существующий продукт:

 Dim blnMatch As Boolean = False   For Each objDR In objDT.Rows     If objDR("Product") = Product Then          objDR("Quantity") += txtQuantity.Text          blnMatch = True          Exit For     End If  Next 

Теперь оберните новый код, который добавляет новую строку в условный оператор.

 If Not blnMatch Then     objDR = objDT.NewRow     objDR("Quantity") = Int32.Parse(txtQuantity.Text)     objDR("Product") = ddlProducts.SelectedItem.Text     objDR("Cost") = Decimal.Parse(ddlProducts.SelectedItem.Value)     objDT.Rows.Add(objDR)  End If 

По сути, новая строка будет создана, только если товар не найден в корзине. Однако, если он найден, он просто отрегулирует количество в зависимости от того, что пользователь поместит в элемент управления текстового поля количества.

Шаг 4: Сохранение итогового заказа

Следующим шагом будет создание функции, которая хранит промежуточную сумму стоимости товаров в корзине. Это будет использоваться для предоставления пользователю рабочей суммы при добавлении и удалении товаров из корзины. Вы можете добавить эту функцию, используя код ниже:

 Function GetItemTotal() As Decimal      Dim intCounter As Integer     Dim decRunningTotal As Decimal      For intCounter = 0 To objDT.Rows.Count -- 1          objDR = objDT.Rows(intCounter)          decRunningTotal += (objDR("Cost") * objDR("Quantity"))     Next      Return decRunningTotal   End Function 

Вы можете видеть, что эта функция просто перебирает строки в DataTable, умножает столбец количества на столбец стоимости и возвращает результат. Первый шаг включает определение функции. Поскольку вы хотите вернуть десятичное значение, убедитесь, что вы определили функцию как десятичную. Далее мы создадим две новые переменные: одну как целое число и одну как десятичную. Затем вы перебираете строки в DataTable, умножаете столбец затрат для конкретной строки на количество для этой строки и сохраняете его в переменной decRunningTotal . Наконец, мы вернем значение.

Последним шагом будет запись значения функции в элемент управления меткой. Добавьте следующую строку в конец подпрограммы btnAddToCart — это эффективно записывает стоимость в элемент управления меткой:

 lblTotal.Text = "$" & GetItemTotal() 

Сохраните свою работу и запустите ее в браузере. На этот раз, когда вы добавляете товары в корзину, в элементе управления меткой отображается итоговое значение. Фантастический! Теперь последняя часть, которую мы обсудим, касается удаления товаров из корзины.

Шаг 5: Извлечение товаров из корзины

Теперь, когда рабочая модель корзины для покупок создана, мы хотим добавить следующую функциональность: удаление товаров из корзины. Очевидно, вы понимаете важность этого: вы хотите, чтобы пользователи могли добавлять и удалять любые и все элементы в или из корзины покупок по мере необходимости. Добавьте функциональность для удаления товаров из корзины, используя следующую подпрограмму:

 Sub Delete_Item(s As Object, e As DataGridCommandEventArgs)      objDT = Session("Cart")     objDT.Rows(e.Item.ItemIndex).Delete()     Session("Cart") = objDT      dg.DataSource = objDT     dg.DataBind()      lblTotal.Text = "$" & GetItemTotal()   End Sub 

Эта подпрограмма, которую мы свяжем с DataGrid через минуту, просто выгружает содержимое сеанса в новый объект DataTable , удаляет конкретную строку, по которой щелкнул пользователь, и затем помещает пересмотренную таблицу DataTable обратно в переменную Session для хранения. , Наконец, мы повторно привязываемся к DataGrid и обновляем итоговое значение, вызывая GetItemTotal() .

Вы должны заметить, что одним из параметров, передаваемых в подпрограмму, является параметр DataGridCommandEventArgs . Без этого параметра мы не смогли бы определить, какой элемент в DataGrid выбрал пользователь.

Последним шагом будет изменение DataGrid. Вам нужно будет добавить новый столбец button , а также новое событие, чтобы вызвать подпрограмму Delete_Item . Новая DataGrid должна напоминать следующий код:

 <asp:DataGrid id=dg runat="server"  ondeletecommand="Delete_Item">  <columns>  <asp:buttoncolumn buttontype="LinkButton"  commandname="Delete" text="Remove Item" />  </columns>  </asp:DataGrid> 

Сохраните свою работу и запустите ее в браузере. На этот раз вы можете добавлять товары и удалять их свободно!

Резюме

Как вы уже видели, создать собственную корзину покупок не очень сложно. Самое замечательное в создании собственной корзины — это то, что она полностью настраиваема, и вам не нужно тратить сотни долларов на набор расширений, который вам в конечном итоге придется изучить.

Перейти на страницу: 1 | 2