如何循环和处理匹配与非匹配?

时间:2012-11-12 16:17:23

标签: c# winforms listview loops

我有一个包含2列的ListView。例如,我们会说它看起来像这样:

ColA    | ColB  
-----------------
001     |  
002     |  
003     |  
004     |  
005     |  

我有一个包含以下行的文本文件:

001  
002  
004  
005  
008  

我正在尝试逐行读取文件,如果数字与ColumnA中的数字匹配,我想将其添加到ColumnB。这很好(见下面的例子)。但是,我还想将任何非匹配添加为新的ListViewItem。我无法理解这一部分。这是我到目前为止所做的:

foreach (string textfileitem in TheTextFile)
{
    foreach (ListViewItem item in ListView1.Items)
    {
        var existingitem = item.SubItems[0];

        if (existingitem.Text == textfileitem)
        {
            item.SubItems[1].Text = textfileitem;
        }
    }
}

我不确定如何处理任何不匹配并将它们添加到ListView。最终结果如下:

ColumnA | ColumnB
----------------- 
001     | 001
002     | 002
003     | 
004     | 004
005     | 005
-       | 008

一如既往,感谢您的帮助!

4 个答案:

答案 0 :(得分:1)

浏览columnA,创建<String,YourDataSourceItem>字典。运行您的文件 - 使用TryGetValue进行测试匹配。如果找到,请设置columnB。如果没有,请创建一个新项目。

答案 1 :(得分:0)

这是另一种方法:

List<string> missingItems = new List<string>();
foreach (string textfileitem in TheTextFile)
{
    foreach (ListViewItem item in ListView1.Items)
    {
        var existingitem = item.SubItems[0];

        if (existingitem.Text == textfileitem)
        {
            item.SubItems[1].Text = textfileitem;
        }
        else
        {
            missingItems.Add(textfileitem);
        }
    }
}
foreach (string missingItem in missingItems)
{
    // Add missing item to your ListView.
    ListView1.Items.Add("missing").SubItems.Add(missingItem);
}

答案 2 :(得分:0)

我会做这样的事情:

List<string> listItems = ListView1.Items.Select(item => item[0].ToString())  // Get list of current items
foreach (string textItem in TheTextFile.Except(listItems)) { // Get all text items that are not in the current list
// Add missing list view item
}

答案 3 :(得分:0)

根据@Neolisk的建议,我重新考虑了我的流程并最终使用了绑定到DataGridView的{​​{1}}。 ColumnA由DataTable中的数据填充。然后,我将ColumnA中的每个项目放入DataTable

我的代码现在看起来像这样:

Dictionary

至少我希望这是准确的。我试图使我的代码通用,并摆脱非必要的东西。