(2) smazání položky (kolekce) nákupního košíku   zodpovězená otázka

VB.NET, ASP.NET WebForms

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

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Tak, už jsem na to přišel a zde je řešení pro ostatní ...

'RemoveItemItem() - odstranění položky z košíku
    Private Sub RemoveItemItem(ByVal objkodItem As String, ByVal akceItem As String)

        Dim IndexItem As Integer = -1
        For Each item As CartItem In Items
            IndexItem += 1
            If item.Objkod = objkodItem And item.Akce = akceItem Then
                Items.RemoveAt(IndexItem)
                Return
            End If
        Next

    End Sub

je nutné přistupovat k položce, ktorou jsem chtěl smazat přes její index ....

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback