【问题标题】:How do I find an item in a ListView and update another column in that same row?如何在 ListView 中找到一个项目并更新同一行中的另一列?
【发布时间】:2012-11-02 02:23:10
【问题描述】:

我的应用程序读取一个文本文件并填充一个 ListView。这很简单,就像这样:

Date     | Invoice   | Status  
20121015 | 123123    |  
20121015 | 123124    | 
20121015 | 123456    |  
20121015 | 124123    |  

然后我需要阅读第二个文本文件,该文件可能包含也可能不包含在 ListView 中找到的发票以及状态。如果有匹配的发票,则需要将第二个文本文件中的状态添加到 ListView,使其如下所示:

Date     | Invoice   | Status  
20121015 | 123123    |  
20121015 | 123124    | 
20121015 | 123456    | Paid 
20121015 | 124123    |  

最初我有一个只有发票号码的列表框,并且正在做

int index = ListBox1.FindString(<whatever>);

获取包含发票的行的索引,然后删除项目 (RemoveAt(Index)) 并插入一个新项目,如

ListBox.Items.Insert(index, invoice + " PAID")

如何使用 ListView 做类似的事情?我喜欢有列而不是只有 1 行文本的想法。我应该使用 ListView 以外的东西来完成此操作吗?

平均而言,我正在阅读的每个文本文件有

【问题讨论】:

  • 您是否同时读取两个文件? (即一个接一个?)也许您可以同时阅读它们并创建一个组合数据列表,然后您可以使用它来填充ListView
  • 不幸的是,我当时不会像第一个那样阅读第二个文件。

标签: c# winforms listview


【解决方案1】:

您可以枚举列表视图的Items 集合。是的,listview 是实现此目的的理想控件。

foreach (ListViewItem item in listView1.Items)
{
    var invoice = item.SubItems[1];
    if (invoice.Text == "whatever")
    {
        item.SubItems[2] = new ListViewItem.ListViewSubItem() { Text = "Paid" };
        break;
    }
}

【讨论】:

  • 谢谢 .. 我想我将不得不遍历这样的项目!
  • 由于我的“状态”(索引 2)列没有被填充,上面的代码出现错误,关于 2 是无效索引。当我阅读第一个文件时,我通过在“状态”列中添加“-”来快速解决此问题。再次感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-06
  • 1970-01-01
  • 2022-11-12
  • 2016-03-26
  • 1970-01-01
  • 2019-07-08
相关资源
最近更新 更多