C#协助foreach datagridview数据删除

问题描述 投票:1回答:1

场景:我正在使用来自数据库的数据加载DataGridView,所以为了做到这一点,我正在使用foreach循环,现在问题是当第二次进入DataGridView时它会加载之前的数据和数据现在循环。

为了解决这个问题,我做了这个:

    private void ViewAvailProd_Btn_Click(object sender, EventArgs e)
    {
        int numRows = AvailProd_DGV.RowCount;

        foreach (TBL_Product prod in DataLProducts.GetProducts())
        {
            if (numRows > 1)
            {
                AvailProd_DGV.Rows.Clear();
            }

            AvailProd_DGV.Rows.Add(prod.ProductID, prod.Name, prod.Category, prod.Price, prod.Stock, "Purchase");
        }
        this.PNL_ViewAvailProd.Visible = true;
    }

但是,出现了另一个问题:它是这样做的:

之前;

enter image description here

之后,c

如果我然后输入以下代码:

    private void ViewAvailProd_Btn_Click(object sender, EventArgs e)
    {
        AvailProd_DGV.Rows.Clear();

        foreach (TBL_Product prod in DataLProducts.GetProducts())
        {
            AvailProd_DGV.Rows.Add(prod.ProductID, prod.Name, prod.Category, prod.Price, prod.Stock, "Purchase");
        }
        this.PNL_ViewAvailProd.Visible = true;
    }

这将是输出:

之前;

enter image description here

之后,enter image description here

c# winforms foreach datagridview
1个回答
0
投票

在方法的开头检查你的rowcount,结果> 1,所以每次在循环中执行if时,它将清除所有行,只添加一行。要解决此问题,只需清除方法开头的所有行,然后再将它们全部加载。像这样:

private void ViewAvailProd_Btn_Click(object sender, EventArgs e)
{
    AvailProd_DGV.Rows.Clear();

    foreach (TBL_Product prod in DataLProducts.GetProducts())
    {
        AvailProd_DGV.Rows.Add(prod.ProductID, prod.Name, prod.Category, prod.Price, prod.Stock, "Purchase");
    }
    this.PNL_ViewAvailProd.Visible = true;
}

编辑重建如果我为这个方法加载我自己的测试代码,它似乎工作得很好。

public List<Product> GetProducts()
{
    List<Product> list = new List<Product>();
    list.Add(new Product() { Id = 0, Name = "Fnatic", Category = "eSports", Price = 1000000, Stock = 1 });
    list.Add(new Product() { Id = 1, Name = "G2", Category = "eSports", Price = 500000, Stock = 4 });
    list.Add(new Product() { Id = 2, Name = "SKT", Category = "eSports", Price = 2000000, Stock = 0 });
    list.Add(new Product() { Id = 3, Name = "Roccat", Category = "eSports", Price = 150000, Stock = 17 });
    return list;
}

private void ViewButton_Click(object sender, EventArgs e)
{
    dataGridView.Rows.Clear();

    foreach (var product in GetProducts())
    {
        dataGridView.Rows.Add(product.Id, product.Name, product.Category, product.Price, product.Stock, "Purchase");
    }
}

使用这个时,每次我点击ViewButton即可得到这个dataGridView:enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.