从datagridview和列表中删除行

时间:2016-11-22 02:49:44

标签: c# .net winforms datagridview

我有这堂课:

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中的所选产品。
我不知道在这种情况下如何绑定。

2 个答案:

答案 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);