我有这堂课:
public class Product
{
public int ProdID { get; set; }
public string ProdName { get; set; }
}
现在创建一个List:
public static List<Product> Products = new List<Product>();
使用自定义列填充datadridview:
productsTable.Columns.Add("IDColumn", "ID of the product");
productsTable.Columns.Add("NameColumn", "Name of the product");
foreach (var product in Products)
{
productsTable.Rows.Add(product.ProdID, product.ProdName);
}
我有一个从行中删除的按钮:
private void buttonDeleteProduct_Click(object sender, EventArgs e)
{
int selectedIndex = productsTable.CurrentCell.RowIndex;
if (selectedIndex > -1)
{
productsTable.Rows.RemoveAt(selectedIndex);
}
}
我面临的问题是在列表中删除datagridview中的所选产品。
我不知道在这种情况下如何绑定。
答案 0 :(得分:1)
您不需要使用foreach循环来填充网格,您可以使用gridview列的DataPropertyName
让他们为您完成工作:
productsTable.Columns.Add(new DataGridViewTextBoxColumn
{
Name = "IDColumn",
DataPropertyName = "ProdID",
HeaderText = "ID of the product"
});
productsTable.Columns.Add(new DataGridViewTextBoxColumn
{
Name = "NameColumn",
DataPropertyName = "ProdName",
HeaderText = "Name of the product"
});
根据上面的代码,您可以将产品列表设置为DataGridView的DataSource,如下所示:
productsTable.DataSource = Products;
至于您的问题,考虑到您使用了上面的代码,您可以删除所选行并使用以下代码“刷新”网格:
if (productsTable.CurrentRow != null)
{
Products.RemoveAt(productsTable.CurrentRow.Index);
productsTable.DataSource = Products.ToList();
}
编辑:为了确保在索引不同的情况下删除正确的产品,您可以删除以下内容:
if (productsTable.CurrentRow != null)
{
Product prod = (Product)productsTable.CurrentRow.DataBoundItem;
Products.Remove(prod);
productsTable.DataSource = Products.ToList();
}
答案 1 :(得分:0)
从productId
获取DataGrid
并使用它从List<Product>
查找产品,然后您可以将其删除:
int productId = (int)productsTable.Rows[selectedIndex].Cells[0].Value;
var product = products.FirstOrDefault(p => p.Id == productId);
if (product != null)
products.Remove(product);