我有一个包含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
一如既往,感谢您的帮助!
答案 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
至少我希望这是准确的。我试图使我的代码通用,并摆脱非必要的东西。