Добавление цены для каждого элемента в списке - C#. Net, Windows Приложения для форм - PullRequest
1 голос
/ 02 апреля 2020

Я пытаюсь создать приложение windows с c#. Основная функциональность приложения заключается в том, что оно позволяет пользователю добавлять товары в корзину (возможно, из списка) и суммировать (в тексте метки) общую стоимость товаров, добавленных в эту корзину. Также продукт может быть добавлен более одного раза. Таким образом, в основном это можно назвать приложением корзины покупок.

Мой вопрос здесь, как я могу рассчитать общую стоимость товаров, добавленных в корзину? Потому что, во-первых, я добавил все продукты в этот список в виде списка строк (с Listbox.Items.Add("Product1"). Поэтому я не знаю, как добавить цену для каждого продукта (строковый элемент этого списка), а позже быть в состоянии добавить его.

Должен ли я каким-либо образом добавить продукты в качестве объектов типа Product Class (с 2 свойствами, именем и ценой)? Если да, то как передать только свойство name в список элементов списка?

Итак, вот мой основной код:

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 Ответ

1 голос
/ 02 апреля 2020

Первое, что нужно сделать, это определить класс Product с двумя отдельными свойствами: одно для Имя и одно для Цена .
Затем переопределить Метод ToString () для возврата в одной строке и имени, и цены, преобразованной в строку, или только имени.

Это переопределение необходимо, если вы хотите, чтобы названия продуктов и их цена отображались в одной строке в ListBox. Действительно, элемент управления ListBox, когда он связан через DataSource, просматривает метод ToString связанного класса для представления его элементов.

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")}";
    }
}

Теперь в конструкторе форм вы можете создать список продуктов ( статически в этом примере) и передайте этот список свойству DataBource объекта ListBox.
Наконец, задача для вычисления суммы - это простой вызов Linq расширению Sum и передача результата в текстовое свойство Label. .

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});
}
...