【问题标题】:Adding a price to each item in a listbox - C# .Net, Windows Forms Applications为列表框中的每个项目添加价格 - C# .Net,Windows 窗体应用程序
【发布时间】:2020-07-14 11:03:12
【问题描述】:

我正在尝试使用 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);
    }
}

【问题讨论】:

    标签: c# listbox shopping-cart


    【解决方案1】:

    首先要做的是使用两个单独的属性定义 Product 类,一个用于 Name,一个用于 Price
    然后重写 ToString() 方法以在单个字符串中返回名称和价格都转换为字符串或仅返回名称。

    如果您想在列表框中显示的单行中显示产品名称及其价格,则需要此覆盖。实际上,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});
    }
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-14
    相关资源
    最近更新 更多