首页 > 解决方案 > 对列表进行更改导致 DataGridView 显示空白

问题描述

我有一个项目,用户可以在其中添加新产品或修改现有产品。产品可以有与之关联的部件。我在我的产品构造函数所在的类中创建了一个列表,用于保存每个产品的零件。

我试图弄清楚如何设置,如果用户对与产品关联的部件进行更改但点击取消按钮,那么列表将恢复为原始列表。如果他们在对产品部件列表进行编辑后点击保存按钮,则会保存更新的列表,当他们再次打开产品时,会显示更新的列表。

我拥有的文件中的所有代码都相当多,但我认为对我所拥有的最有帮助的部分是......

在产品文本框中填写产品信息。使用作为 product.Parts 列表副本的 tempParts 列表填充 datagridview CurrentPartsDataGrid。或者,如果它是创建的新产品,则创建一个新的空列表。

 if (product != null)
 {
    ProductIdText.Text = product.ID.ToString();
    ProductNameText.Text = product.Name.ToString();
    InvText.Text = product.QOH.ToString();
    PriceText.Text = product.Price.ToString();
    InvMinText.Text = product.Min.ToString();
    InvMaxText.Text = product.Max.ToString();

    tempParts = new BindingList<Part>(product.Parts);
  }
  else
  {
    product = new Product();
    tempParts = new BindingList<Part>();
  }
  CurrentPartsDataGrid.DataSource = tempParts; 

在保存/取消按钮单击事件方法中,我尝试过执行 for 循环或每个循环。我清除列表,然后尝试重新填充。

保存代码

    product.Parts.Clear();
    foreach (Part part in tempParts)
    { 
       product.Parts.Add(part);
    }

取消中的代码

    tempParts.Clear();

    foreach (Part part in product.Parts)
    {
       tempParts.Add(part);
    }

如果还有什么可以帮助的,请告诉我。我是在这里发帖的新手,所以不想让帖子超载,但也不想提供足够的内容。

关于如何解决这个问题的任何帮助都会很棒。

谢谢!

标签: c#listwinformsdatagridview

解决方案


我最终不需要做任何 EndEdit() 的事情。

在我的(if product != null)

我添加了

 tempList = new BindingList<Part>();
                for (int i = 0; i < product.Parts.Count; i++)
                {
                    tempList.Add(product.Parts[i]);
                }

这创建了一个新的临时列表,当用户选择取消时,我设置product.Parts = tempList了它解决了问题。


推荐阅读