0

我目前正在尝试使用 foreach 循环来检查 listviewitem 是否不在 listview 中,以及是否不再编写它。到目前为止,这是我的代码。

    private void button1_Click(object sender, EventArgs e)
    {
        TextReader reader = new StringReader(richTextBox1.Text);
        string[] strItems = null;
        foreach (ListViewItem item in listView1.Items)
        {
            strItems = reader.ReadLine().Split("-".ToCharArray());
            item.Text = strItems[0].ToString();
            item.SubItems.Add(strItems[1].ToString());
            item.SubItems.Add(strItems[2].ToString());
            item.SubItems.Add(strItems[3].ToString());
            item.SubItems.Add(strItems[4].ToString());
            listView1.Items.Add(item);
        }
    }

感谢所有帮助!

4

4 回答 4

1

您不妨阅读所有开头的行,使用File.ReadAllLines. .Distinct()然后,您可以使用 LINQ 的扩展删除重复项:

private void button1_Click(object sender, EventArgs e)
{
    string[] lines = File.ReadAllLines(richTextBox1.Text);

    foreach (string line in lines.Distinct())
    {
        listView1.Items.Add(new ListViewItem(line.Split({'-'})));
    }
}

我还使用ListViewItem了更方便的构造函数。

于 2012-06-06T02:15:59.993 回答
1

我认为@minitech 的答案遗漏了一件:您不仅想添加不同的新条目,还想过滤掉列表框中已经存在的任何新条目。

private void button1_Click(object sender, EventArgs e) 
{
    string[] lines = richTextBox1.Lines;

    // Not sure about the exact Items.Contains() and item.Text usage, but that's the idea
    foreach (string line in lines.Distinct().Where(line => 
        !listView1.Items.Contains(item => line == item.Text)))
    { 
        string[] items = line.Split('-'); 
        listView1.Items.Add(new ListViewItem(items)); 
    } 
} 

有一些方法可以优化这一点,但选择正确的方法首先取决于列表视图的项目来自哪里(以及列表视图中有多少项目,即您需要优化多少)。

于 2012-06-06T02:25:47.367 回答
0

我不确定我是否理解你的问题。

如果您在 ListView 中已经存在的所有项目中搜索特定匹配项,那么为什么不使用“FindItemWithText()”或等效项:

如果查询没有返回任何内容,则该项目不在列表中。

'希望这会有所帮助......至少有一点......

于 2012-06-06T02:11:23.670 回答
0

您的代码是否仅用于检查现有的 ListViewItem?如果您希望您的代码向空的 ListView 添加一个新项目,那么它将失败,因为如果 ListView 中没有任何内容,它将不会进入 foreach 循环。

如果可以尝试以下检查现有的 ListViewItem

private void button1_Click(object sender, EventArgs e)
{
    TextReader reader = new StringReader(richTextBox1.Text);
    string[] strItems = null;
    foreach (ListViewItem item in listView1.Items)
    {
        strItems = reader.ReadLine().Split("-".ToCharArray());
        if (ListView1.FindItemWithText(strItems[0].ToString()) != null)
        {
            item.Text = strItems[0].ToString();
            item.SubItems.Add(strItems[1].ToString());
            item.SubItems.Add(strItems[2].ToString());
            item.SubItems.Add(strItems[3].ToString());
            item.SubItems.Add(strItems[4].ToString());
            listView1.Items.Add(item);
        }
    }
}

请参考以下网址

http://msdn.microsoft.com/en-us/library/system.windows.forms.listview.listviewitemcollection.find(v=vs.85).aspx

于 2012-06-06T02:29:25.527 回答