0

我有一个包含 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

4 回答 4

1

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

于 2012-11-12T16:22:50.873 回答
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);
}
于 2012-11-12T16:32:05.417 回答
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
}
于 2012-11-12T17:10:06.727 回答
0

根据@Neolisk 的建议,我重新考虑了我的流程并最终使用了 a 的DataGridView绑定DataTable。ColumnA 由DataTable. 然后,我将 ColumnA 中的每个项目放入一个Dictionary.

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

int count;
Dictionary<string, int> d = new Dictionary<string, int>();

foreach (DataRow dr in dataSet1.Tables["Table1"].Rows)
{
    d.Add((string)dr[0], count);
    count++;
}

foreach (string textfileitem in TheTextFile)
{
    string item = //specific data from textfileitem
    int value;

    if (d.TryGetValue(item, out value)
    {
        DataRow[] dr = dataSet1.Tables["Table1"].Select("ColumnA = " + item");
        dr[0]["ColumnB"] = item;
    }
    else
    {
        dataTable1.Rows.Add(null, item);
    }
}

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

于 2012-11-12T21:03:01.160 回答