Dobrý den, asi před dvěma dny jsem prosil o pomoc s mazáním celé kolekce nákupního košíku, což mám díky vaší pomoci vyřešeno, ale nyní jsem narazil na zvláštní problém při mazání jednotlivých položek z košíku. Mám následující třídu "ShoppingCart.vb", ve které mám mimo jiné funkce pro odstranění jednotlivých položek:
'RemoveItem() - odstranění položky z košíku
Public Sub RemoveItem(ByVal objkod As String, ByVal akce As String)
If objkod = "AC100001" Then
RemoveItemItem(objkod, akce)
Else
'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
RemoveItemItem(objkod, akce)
If SortAkce = True Then
RemoveItemAkce("AC000200", akce)
End If
If SortBonus = True Then
If objkod <> "AC100001" Then
RemoveItemWater("AC100001", akce)
End If
End If
End If
End Sub
'RemoveItemItem() - odstranění položky z košíku
Private Sub RemoveItemItem(ByVal objkodItem As String, ByVal akceItem As String)
For Each item As CartItem In Items
If item.Objkod = objkodItem Then
If item.Akce = akceItem Then
Items.Remove(item)
Return
End If
End If
Next
End Sub
'RemoveItemAkce() - odstranění položky s akční slevou
Private Sub RemoveItemAkce(ByVal objkodAkce As String, ByVal akceAkce As String)
For Each item As CartItem In Items
If item.Objkod = objkodAkce And item.Akce = akceAkce Then
Items.Remove(item)
Return
End If
Next
End Sub
'RemoveItemWater() - odstranění položky "AC100001"
Private Sub RemoveItemWater(ByVal objkodWater As String, ByVal akceWater As String)
For Each item As CartItem In Items
If item.Objkod = objkodWater And item.Akce = akceWater Then
Items.Remove(item)
Return
End If
Next
End Sub
a nyní k problému: - do kolekce ukládám pro jednotlivé položky následující vlastnosti: ObjKod - objednací kód sortimentu Quantity - počet ks Akce - v případě, že je položka v akci, ukládám zde ObjKod sortimentu, ke kterému se akce vztahuje takže mám např. takovouto kolekci: ObjKod ..... Quantity ........ Akce ------------------------------------------------------------- AC100001 ... 10 AC234201 ... 1 ... AC234201 AC000200 ... 1 ... AC234201 AC100001 ... 5 ... AC234201 nyní bych potřeboval smazat (např. poslední) položku zavolám tedy funkci na stránce Shopping.aspx následující funkci: ShoppingCart.Instance.RemoveItem(removeKod, removeAkce) removeKod = "AC100001" removeAkce = "AC234201" a zde je ten problém !!! namísto toho, aby se mi odstranila položka, která má vlastnost ObjKod(AC100001) a vlastnost Akce(AC234201), odstraní se mi vždy první položka v kolekci, která má ve vlastnosti ObjKod(AC100001) nezávisle na tom, co obsahuje vlastnost Akce. Ještě pro doplnění, pokud funkci předám hodnotu vlastnosti removeAkce takovou, která ve vlastnosti Akce v kolekci neexistuje (např. ShoppingCart.Instance.RemoveItem(removeKod, "AC123456") , neprovede se nic (žádná z položek nevyhoví podmínce a proto se nic neodstraní. Nevíte prosím kde dělám chybu ... Díky moc
|