我在这里有点失去理智了。
当我最初构建 ListView 时,它完全按预期工作:
ListViewItem listViewItem = listView.Items.Add(model.Id.ToString(), model.Name, model.Id.ToString());
listViewItem.SubItems.AddRange(new ListViewItem.ListViewSubItem[]
{
new ListViewItem.ListViewSubItem() {Name = "ArtNr", Text = model.ArticleNumber},
new ListViewItem.ListViewSubItem() {Name = "Quantity", Text = "XXX"},
});
我在控件中定义了 3 列,它们分别显示名称、文章编号和“XXX”。
在稍后阶段,我必须用实际数据替换“XXX”,并执行以下操作:
foreach (ListViewItem listViewItem in listView.Items)
{
InvoiceLine invoiceLine = FindInvoiceLine(...);
if (invoiceLine == null)
continue;
listViewItem.SubItems["Quantity"].Text = invoiceLine.Quantity.ToString();
}
我可以看到文本实际上被设置在正确的 SubItem.Text 中,如果我稍后检查,同时通过不同的引用引用列表视图,即我知道我正在查看正确的对象。
然而 GUI 并没有反映变化,它在第三列中仍然显示“XXX”。
是什么赋予了?!
在挖掘 .NET Framework 源代码后,我发现这绝对是 bugAddRange方法。他们忘记设置 ListView SubItem 的所有者,因此在设置 Text 属性时文本没有更新。
你应该使用添加(列表视图子项)反而。
或使用带参数的子项构造函数为其设置所有者。
listViewItem.SubItems.AddRange(new ListViewItem.ListViewSubItem[]
{
new ListViewItem.ListViewSubItem(listViewItem, model.ArticleNumber) {Name = "ArtNr" },
new ListViewItem.ListViewSubItem(listViewItem, "XXX") {Name = "Quantity" },
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)