Шаг 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>
Сохраните свою работу и запустите ее в браузере. На этот раз вы можете добавлять товары и удалять их свободно!
Резюме
Как вы уже видели, создать собственную корзину покупок не очень сложно. Самое замечательное в создании собственной корзины — это то, что она полностью настраиваема, и вам не нужно тратить сотни долларов на набор расширений, который вам в конечном итоге придется изучить.