Próbuję zbudować aplikację Windows Forms z C #. Główną funkcjonalnością aplikacji jest to, że pozwoli użytkownikowi dodać przedmioty do koszyka (prawdopodobnie prawdopodobnie) i podsumowuje (do tekstu etykiety) Całkowita cena produktów dodanych do tego wózka. Ponadto produkt można dodać więcej niż raz. Zasadniczo można go nazywać aplikacją koszyka.

Moje pytanie tutaj jest, jak mogę obliczyć całkowitą cenę przedmiotów dodanych do koszyka? Ponieważ przede wszystkim dodałem wszystkie produkty do tej listy jako listę ciągów (z Listbox.Items.Add("Product1"). Więc nie wiem, jak dodać cenę za każdy produkt (element strunowy tej listy), a później można go dodać.

Czy powinienem w jakiś sposób dodać produkty jako obiekty typu {x0}} (z 2 właściwościami, nazwą i ceną)? Jeśli tak, jak mija tylko nazwę właściwości do listy elementów Listbox?

Do tej pory tutaj jest niektóre z mojego głównego kodu:

public Form1()
{
    InitializeComponent();
    Product products = new Product();
    AddProducts(); 
}

List<string> productList = new List<string>();

public void AddProducts()
{
    productNames.Add("Product X");
    productNames.Add("Product Z");

    foreach (var product in productList) 
    {
        ProductListBox.Items.Add(product);
    }
}
1
Genc Hani 2 kwiecień 2020, 16:00

1 odpowiedź

Najlepsza odpowiedź

Pierwszą rzeczą do zrobienia jest zdefiniowanie klasy produktu z dwoma oddzielnymi właściwościami, jedną do nazwy i jeden dla Cena .
Następnie nadpisaj metodę Tostring () , aby powrócić do pojedynczego ciągu zarówno nazwę, jak i ceną konwertowaną na ciąg lub tylko nazwę.

To zastąpienie jest wymagane, jeśli chcesz wyświetlić nazwy produktów i ich cenę w jednej linii wyświetlonej w Listbox. Rzeczywiście, kontrolka Listbox, gdy jest związana przez DataSource, patrzy na metodę Tostrującej klasy granicznej, aby reprezentować swoje przedmioty.

public class Product
{ 
    public string Name { get; set; }
    public decimal Price { get; set; }

    // This returns both Name and Price, but, of course, if you want only
    // the name just return $"{Name}"
    public override string ToString()
    {
        return $"{Name} - {Price.ToString("C")}";
    }
}

Teraz, w konstruktorze formularza, możesz utworzyć listę produktów (statycznie w tym przykładzie) i przejść do tej listy na właściwość DataSource Listbox.
Wreszcie zadanie do obliczenia całkowitej jest tylko proste połączenie LINQ do rozszerzenia i przekazać wynik do właściwości tekstu etykiety.

List<Product> products = new List<Product>();
public Form1()
{
    InitializeComponent();
    AddProducts(); 
    ProductListBox.DataSource = products;
    labelTotalPrice.Text = products.Sum(x => x.Price).ToString("C");
}

public void AddProducts()
{
    products.Add(new Product {Name = "Product X", Price = 10.4m});
    products.Add(new Product {Name = "Product Z", Price = 1.5m});
    products.Add(new Product {Name = "Product K", Price = 7.32m});
}
2
Palle Due 2 kwiecień 2020, 13:25