C#设置ListView的Item的Subitem的文本不显示

标签 c# winforms listview

我有点失去理智了。 当我最初构建 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 中,如果我稍后检查,同时通过不同的引用引用 ListView ,即我知道我正在查看正确的对象。 然而 GUI 并没有反射(reflect)变化,它在第三列中仍然显示“XXX”。

什么给了?!

最佳答案

在挖掘.NET Framework的源代码后,我发现这绝对是AddRange方法的错误。他们忘记设置 ListViewSubItem 的所有者,因此设置 Text 属性时文本没有更新。

您应该使用Add(ListViewSubItem)

或使用带参数的子项构造函数为其设置所有者。

listViewItem.SubItems.AddRange(new ListViewItem.ListViewSubItem[]
  {
    new ListViewItem.ListViewSubItem(listViewItem, model.ArticleNumber) {Name = "ArtNr" },
    new ListViewItem.ListViewSubItem(listViewItem, "XXX") {Name = "Quantity" },
  });

关于C#设置ListView的Item的Subitem的文本不显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28785580/

相关文章:

c# - 抽象类中嵌套抽象类及其实现方式

c# - 如何更改项目中的启动窗体?

javascript - AngularJS 中的数组未获取字符串值

.net - 创建报告 : MongoDB + .Net Winforms

c# - 加载图像停止问题

android - 更改 ListView 中项目的颜色 - Android

android - 更新数据库后如何更新ListView?

c# - 从静态 C 库调用函数

c# - 如何在 Windows Installer 自定义对话框中将字段设置为必填

java - Android SDK - Java - listview.setAdapter 失败