簡體   English   中英

為列表框中的每個項目添加價格 - C# .Net、Windows 窗體應用程序

[英]Adding a price to each item in a listbox - C# .Net, Windows Forms Applications

我正在嘗試使用 c# 構建 Windows 窗體應用程序。 該應用程序的主要功能是允許用戶將商品添加到購物車(可能是列表框)並匯總(到標簽文本)添加到該購物車的產品的總價格。 此外,可以多次添加產品。 所以基本上它可以被稱為購物車應用程序。

我的問題是,如何計算添加到購物車中的商品的總價? 因為,首先,我已將所有產品作為字符串列表添加到此列表框(使用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);
    }
}

首先要做的是定義具有兩個單獨屬性的 Product 類,一個用於Name ,一個用於Price
然后覆蓋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")}";
    }
}

現在,在您的表單構造函數中,您可以創建產品列表(在本例中是靜態的)並將該列表傳遞給 ListBox 的 DataSource 屬性。
最后,計算總數的任務只是對Sum擴展的簡單 Linq 調用,並將結果傳遞給 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});
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM