为列表框中的每个项目添加价格 - C# .Net,Windows Forms Applications
Adding a price to each item in a listbox - C# .Net, Windows Forms Applications
我正在尝试使用 C# 构建 windows 表单应用程序。
该应用程序的主要功能是允许用户将商品添加到购物车(可能是一个列表框)并汇总(到标签文本)添加到该购物车的产品的总价。此外,可以多次添加产品。所以基本上它可以称为购物车应用程序。
我的问题是,如何计算添加到购物车的商品的总价?
因为,首先,我已经将所有产品作为字符串列表添加到此列表框中(使用 Listbox.Items.Add("Product1")
。所以我不知道如何为每个产品添加价格(此列表的字符串元素),以后可以把它加起来。
我是否应该以某种方式将产品添加为 Product Class
类型的对象(具有 2 个属性,名称和价格)?如果是这样,我如何将名称 属性 传递给列表框项目列表?
到目前为止,这是我的一些主要代码:
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);
}
}
要做的第一件事是使用两个单独的属性定义产品 class,一个用于 Name,一个用于 Price.
然后在单个字符串中将 ToString() 方法覆盖为 return,将名称和价格都转换为字符串或仅转换为名称。
如果您想要在列表框中显示的单行中显示产品名称及其价格,则需要此覆盖。事实上,当通过数据源绑定时,ListBox 控件会查看绑定的 ToString 方法 class 来表示其项目。
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 的数据源 属性。
最后,计算总数的任务只是对 Sum 扩展的简单 Linq 调用,并将结果传递给标签文本 属性.
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});
}
我正在尝试使用 C# 构建 windows 表单应用程序。 该应用程序的主要功能是允许用户将商品添加到购物车(可能是一个列表框)并汇总(到标签文本)添加到该购物车的产品的总价。此外,可以多次添加产品。所以基本上它可以称为购物车应用程序。
我的问题是,如何计算添加到购物车的商品的总价?
因为,首先,我已经将所有产品作为字符串列表添加到此列表框中(使用 Listbox.Items.Add("Product1")
。所以我不知道如何为每个产品添加价格(此列表的字符串元素),以后可以把它加起来。
我是否应该以某种方式将产品添加为 Product Class
类型的对象(具有 2 个属性,名称和价格)?如果是这样,我如何将名称 属性 传递给列表框项目列表?
到目前为止,这是我的一些主要代码:
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);
}
}
要做的第一件事是使用两个单独的属性定义产品 class,一个用于 Name,一个用于 Price.
然后在单个字符串中将 ToString() 方法覆盖为 return,将名称和价格都转换为字符串或仅转换为名称。
如果您想要在列表框中显示的单行中显示产品名称及其价格,则需要此覆盖。事实上,当通过数据源绑定时,ListBox 控件会查看绑定的 ToString 方法 class 来表示其项目。
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 的数据源 属性。
最后,计算总数的任务只是对 Sum 扩展的简单 Linq 调用,并将结果传递给标签文本 属性.
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});
}