Smazání celé kolekce nákupního košíku   otázka

VB.NET, ASP.NET WebForms, .NET

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

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

A musíte nějaký argument předávat? Jak víc potřebuje upřesnit pokyn "smaž všechny položky, co máš u sebe"?

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

Já jsem si také myslel, že stačí zapsat:

ShoppingCart.Instance.Items.RemoveAll()

, ale VisualStudio mi to podtrhává modrou vlnovkou a hlásí ...

"Argument not specified for parameter 'match' of 'Public Function RemoveAll (match As System.Predicate(Of T)) As Integer'.

a tomu nerozumím co po mě chce ...

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

Aha, RemoveAll odstraní všechny prvky, které vyhovují nějakému predikátu, tato metoda pochází z LINQ rozšíření.

Použijte metodu Clear, ta smaže vše a neptá se na nic.

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

Děkuji, teď už je to OK.

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