Dobrý den, můžete prosím někdo pomoci ... mám vytvořenou třídu ShoppingCart.vb a třídu CartItem.vb zajišťující funkcionalitu nákupního košíku
Imports Microsoft.VisualBasic
Imports System.Data.SqlClient
'Třída ShoppingCart
'Udržuje položky v košíku a poskytuje metody pro jejich manipulaci
Public Class ShoppingCart
#Region "Vlastnosti"
Private _items As List(Of CartItem)
Public Property Items() As List(Of CartItem)
Get
Return _items
End Get
Set(ByVal value As List(Of CartItem))
_items = value
End Set
End Property
#End Region
#Region "Implementace session"
Public Shared ReadOnly Instance As ShoppingCart
Shared Sub New()
'Jesliže košík v session ještě není, vytvoří jej a vloží ho do session
'Jestliže již košík existuje načte jej ze session
If HttpContext.Current.Session("AQUAShoppingCart") Is Nothing Then
Instance = New ShoppingCart()
Instance.Items = New List(Of CartItem)
HttpContext.Current.Session("AQUAShoppingCart") = Instance
Else
Instance = CType(HttpContext.Current.Session("AQUAShoppingCart"), ShoppingCart)
End If
End Sub
'Konstruktor chránící před vytvořením z venku
Protected Sub New()
End Sub
#End Region
#Region "Modifikace položek"
'AddItem - Přidání položky do košíku
Public Sub AddItem(ByVal objkod As String, ByVal quantity As Integer)
'zjištění zda se na sortiment vztahuje akční sleva
Dim SortAkce As Boolean
Dim SortBonus As Boolean
Dim connStr As String = ConfigurationManager.ConnectionStrings("MSSQL_db").ConnectionString
Using con As New SqlConnection(connStr)
con.Open()
Dim sqlCommand1 As String = "SELECT [Akce] FROM [Sortiment] WHERE [ObjKod] = @ObjKod"
Using com1 As New SqlCommand(sqlCommand1, con)
com1.Parameters.AddWithValue("ObjKod", objkod)
SortAkce = com1.ExecuteScalar()
End Using
Dim sqlCommand2 As String = "SELECT [Bonus] FROM [Sortiment] WHERE [ObjKod] = @ObjKod"
Using com2 As New SqlCommand(sqlCommand2, con)
com2.Parameters.AddWithValue("ObjKod", objkod)
SortBonus = com2.ExecuteScalar()
End Using
con.Close()
End Using
'vytvoření nové položky pro přidání do košíku
Dim newItem = New CartItem(objkod)
'pokud již položka v košíku existuje - změnit množství
'pokud v košíku není - přidat jako novou položku
If Items.Contains(newItem) Then
For Each item As CartItem In Items
If item.Equals(newItem) Then
item.Quantity += quantity
End If
If item.Objkod = "AC000200" And item.Akce = objkod Then
item.Quantity += quantity
End If
If item.Objkod = "AC100001" And item.Akce = objkod Then
item.Quantity += (quantity * 5)
End If
Next
Else
newItem.Quantity = quantity
newItem.Akce = objkod
Items.Add(newItem)
'přidání položky s akční slevou
If SortAkce = True Then
AddItemAkce("AC000200", quantity, objkod)
End If
'přidání položky s bonusem
If SortBonus = True Then
AddItemBonus("AC100001", quantity, objkod)
End If
End If
End Sub
'SetItemQuantity() - změnit množství u položky v košíku
Public Sub SetItemQuantity(ByVal objkod As String, ByVal quantity As Integer, ByVal akce As String)
If quantity = 0 Then
'v případě nulového množství smazazat položku
RemoveItem(objkod, akce)
Else
'pokud množství není nulové - změnit hodnotu množství u položky
Dim updatedItem = New CartItem(objkod)
For Each item As CartItem In Items
If item.Equals(updatedItem) Then
item.Quantity = quantity
End If
Next
End If
End Sub
'RemoveItem() - odstranění položky z košíku
Public Sub RemoveItem(ByVal objkod As String, ByVal akce As String)
For Each item As CartItem In Items
If item.Objkod = objkod And item.Akce = akce Then
Items.Remove(item)
Return
End If
Next
End Sub
'AddItemAkce() - přidání položky s akční slevou
Private Sub AddItemAkce(ByVal objkodAkce As String, ByVal quantityAkce As Integer, ByVal akceAkce As String)
Dim newItemAkce = New CartItem(objkodAkce)
newItemAkce.Objkod = objkodAkce
newItemAkce.Quantity = quantityAkce
newItemAkce.Akce = akceAkce
Items.Add(newItemAkce)
End Sub
'AddItemBonus() - přidání položky s akční slevou
Private Sub AddItemBonus(ByVal objkodBonus As String, ByVal quantityBonus As Integer, ByVal akceBonus As String)
Dim newItemBonus = New CartItem(objkodBonus)
newItemBonus.Objkod = objkodBonus
newItemBonus.Quantity = quantityBonus * 5
newItemBonus.Akce = akceBonus
Items.Add(newItemBonus)
End Sub
'AddItemWater() - přidání položky "AC100001"
Public Sub AddItemWater(ByVal objkodWater As String, ByVal quantityWater As Integer)
'vytvoření nové položky pro přidání do košíku
Dim newItemWater = New CartItem(objkodWater)
If Items.Contains(newItemWater) Then
Dim NumItem As Integer = 0
For Each item As CartItem In Items
If item.Objkod = "AC100001" And item.Akce = "" Then
NumItem += 1
End If
Next
If NumItem = 0 Then
newItemWater.Quantity = quantityWater
Items.Add(newItemWater)
Return
Else
For Each item As CartItem In Items
If item.Objkod = "AC100001" And item.Akce = "" Then
item.Quantity += quantityWater
Return
End If
Next
End If
Else
newItemWater.Quantity = quantityWater
Items.Add(newItemWater)
Return
End If
End Sub
#End Region
End Class
Imports Microsoft.VisualBasic
'Třída CartItem
'Základní struktura pro práci s položkami v košíku
Public Class CartItem
Implements IEquatable(Of CartItem)
#Region "Vlastnosti"
Private _objkod As String
Public Property Objkod() As String
Get
Return _objkod
End Get
Set(ByVal value As String)
_objkod = value
End Set
End Property
Private _quantity As Integer
Public Property Quantity() As Integer
Get
Return _quantity
End Get
Set(ByVal value As Integer)
_quantity = value
End Set
End Property
Private _akce As String
Public Property Akce() As String
Get
Return _akce
End Get
Set(ByVal value As String)
_akce = value
End Set
End Property
#End Region
Public Sub New(ByVal objkod As String)
Me.Objkod = objkod
End Sub
Public Overloads Function Equals(ByVal item As CartItem) As Boolean Implements IEquatable(Of CartItem).Equals
Return item.Objkod = Me.Objkod
End Function
End Class
Nyní se snažím přidat na stránku Shopping.aspx tlačítko, které by zajistilo smazání všech položek v košíku, ale nevým jaký argument mám funkci ShoppingCart.Instance.Items.RemoveAll(???) předat.
'Odstranění všech položek v košíku
Protected Sub IButtonDelete_Click(ByVal sender As Object, ByVal e As System.Web.UI.ImageClickEventArgs)
ShoppingCart.Instance.Items.RemoveAll(???)
End Sub
Předem děkuji za pomoc
|