我有一个Windows应用程序可以用作购物车。当双击列表中的项目时,客户将他想要购买的金额放入文本框中,系统会将该项目添加到临时列表中。如果该商品与购物车中的某个商品相似,系统将计算和修改购物车,而无需添加更多行。我现在可以添加更多类似于购物车中的项目的项目,但我无法在列表中添加更多行。
private void btnAdd_Click(object sender, EventArgs e)
{
var obj = sCart.FirstOrDefault(x => x.pID == Convert.ToInt32(productID));
if (obj == null)
{
sCart.Add(
new Cart()
{
pID = Convert.ToInt32(productID),
pName = txtProName.Text,
pDesc = txtDesc.Text,
pPrice = Convert.ToInt32(lblDisplayPrice.Text),
pAmount = Convert.ToInt32(txtAmount.Text),
pTotal = Convert.ToInt32(lblDisplayPrice.Text) * Convert.ToInt32(txtAmount.Text)
}
);
}
else {
obj.pAmount = obj.pAmount + Convert.ToInt32(txtAmount.Text);
obj.pTotal = obj.pAmount * obj.pPrice;
}
this.gvCart.DataSource = sCart;
}
从评论:
class Cart
{
public int pID
{ get; set; }
public string pName
{ get; set; }
public string pDesc
{ get; set; }
public int pPrice { get; set; }
public int pAmount { get; set; }
public int pTotal { get; set; }
}
这是购物车的类型。
List<Cart> sCart = new List<Cart>();
我可以添加第一项。如果我继续添加相同的项目(比如说,更新要购买的该项目的数量),它可以工作。但是如果我添加另一个项目,则没有任何反应。网格视图支持更新更多行,但是,只有我之前添加的第一项。我找不到问题出在哪里...
P/S:感谢您向我展示如何发布问题。
修改类声明
class Cart : IEquatable<Cart>
{
public int pID
{ get; set; }
public string pName
{ get; set; }
public string pDesc
{ get; set; }
public int pPrice { get; set; }
public int pAmount { get; set; }
public int pTotal { get; set; }
//Constructor
public Cart(int _pid)
{
pID = _pid;
}
public bool Equals(Cart other)
{
if (this.pID == other.pID)
{
return true;
}
else
{
return false;
}
}
}
在列表中添加类的代码
List<Cart> sCart = new List<Cart>();
BindingSource source = new BindingSource();
private void frmForm_Load(object sender, EventArgs e)
{
source.DataSource = sCart;
this.gvCart.DataSource = source;
}
private void btnAdd_Click(object sender, EventArgs e)
{
Cart cart = new Cart(ProductID);
if (sCart.Contains(cart) == false)
{
//cart.pID = Convert.ToInt32(productID);
cart.pName = txtProName.Text;
cart.pDesc = txtDesc.Text;
cart.pPrice = Convert.ToInt32(lblDisplayPrice.Text);
cart.pAmount = Convert.ToInt32(txtAmount.Text);
cart.pTotal = Convert.ToInt32(lblDisplayPrice.Text) * Convert.ToInt32(txtAmount.Text);
sCart.Add(cart);
}
else
{
cart = sCart[sCart.IndexOf(cart)];
cart.pAmount = cart.pAmount + Convert.ToInt32(txtAmount.Text);
cart.pTotal = cart.pAmount * cart.pPrice;
}
source.CurrencyManager.Refresh();
}