我有一个生成表格的数据网格
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,但不是我学到的东西,所以它一定是列表
答案 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());
}