c# - 对列表进行更改导致 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);
}
如果还有什么可以帮助的,请告诉我。我是在这里发帖的新手,所以不想让帖子超载,但也不想提供足够的内容。
关于如何解决这个问题的任何帮助都会很棒。
谢谢!
解决方案
我最终不需要做任何 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
了它解决了问题。
推荐阅读
- javascript - 在 setInterval 函数 console.log 中的单击事件上双击(有时是三次)单击事件
- c++ - 在 C++/CLI 中从本机转换为无符号短管理的最快方法
- python - 用于 python 代码的 AWS lamda 部署
- tinymce - 如何在 Tinymce 编辑器中使用首字下沉?
- excel - Excel 组合框部分筛选代码
- javascript - Javascript:错误:找不到模块'../data/icons/table.png'
- java - 如何在 ojalgo 中获取求解器任务以返回正确的大小结果
- java - 存储一组静态字符串值的最佳方法
- regex - 使用正则表达式在 Javascript 源代码中查找深度嵌套的对象
- r - 在应用下方以展示模式启动闪亮的应用