从列表中删除一行

时间:2015-02-24 02:02:18

标签: c# list

我有一个生成表格的数据网格 ID|Name|Category|Description|Quantity 用户可以编辑列数量来更新产品数量,虽然最后有一个按钮,因此它可以进行多次更新而不是一次一行,我有代码

List<Product> products = new List<Product>();
 private void Updatebutton_Click(object sender, EventArgs e)
    {
        SaveRows();//save to sql ect
        ClearRows();//empty the list
    }
    private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
    {
       //getvalues correspoding to ProductID and Quantity for the row thats been changed
        AddRow(ProductID, Quantity);
    }

public void AddRow(int ProductID, int quantity)
    {
        duplicate(ProductID);        
        products.Add(new Product { ID = ProductID, Quantity = quantity });
    }

    public void duplicate(int ProductID)
    {          
        foreach (var row in products)
        {
            if (row.ID == ProductID)
            {                  
                products.Remove(new Product() { ID = ProductID });
            }
        }
    }

由于某些原因,该行不希望被删除,即 product id 1 quantity 5 product id 2 quantity 3 then i change the row product id 1 to quantity 6

它不会删除重复我已尝试不同的组合,但没有成功。香港专业教育学院听说过互联网上的hashset,但不是我学到的东西,所以它一定是列表

3 个答案:

答案 0 :(得分:0)

您无法从列表中删除“新对象”。您必须删除实际对象,或者存储该对象以便以后删除它。

我建议Linq易于使用。原谅我,我的C#有点生疏。

public void duplicate(int ProductID)
{          
    products = products.Where(x => x.ID != ProductID).ToList();
}

答案 1 :(得分:0)

试试这个,

  public void UpdateProductQuantity(int productID, int quantity)
  {
       product = products.Where(x => x.ID == productID).FirstOrDefault();
       if(product != null)
       {
         product.Quantity = quantity;
       }
  }

在AddRow()中,只需调用它。

答案 2 :(得分:0)

我怀疑你的方法,但如果你想这样做,那么解决方案就是:

public void duplicate(int ProductID)
{                                         
    products.ToList().Remove(products.Where(a=>a.ID == ProductID).FirstOrDefault());
}