使用按钮将项目添加到列表

时间:2014-03-01 01:25:15

标签: c# winforms winapp

我有一个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; } 
} 

这是sCart的类型。

List<Cart> sCart = new List<Cart>();

我可以添加第一项。如果我继续添加相同的项目(比如说,更新该项目的购买金额),它就可以了。但如果我添加另一个项目,没有任何反应。 gridview支持更新更多行但是,我之前只添加了第一个项目。我找不到问题所在......

p / s:感谢您向我展示如何发布问题。

1 个答案:

答案 0 :(得分:1)

修改您的班级声明

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