检查列表视图是否包含项目

时间:2017-03-29 19:17:34

标签: c# listview

我有一个包含3列(id,name,author)的列表视图,我使用此方法添加行:

     public void addToLv(Book book)
    {

        //TODO: Verifier si l'item existe avant d'ajouter
        ListViewItem lvi1 = new ListViewItem(book.id.ToString());
        lvi1.Text = book.id.ToString();
        lvi1.SubItems.Add(book.name);
        lvi1.SubItems.Add(carte.author);

        listView1.Items.Add(lvi1);

    }

现在我不想检查书是否存在,然后我插入新书以避免重复元素,我尝试这个代码,但它不工作 我已经使用了这一行,但它不起作用:

  (listView1.Items.ContainsKey(book.id))
         {
      listView1.Items.Add(lvi1);
         }
你能帮帮我吗?谢谢

4 个答案:

答案 0 :(得分:1)

看起来您将个人姓名存储在SubItems属性中,因此您需要查询该名称以查看是否存在给定的书名。您可以使用一些LINQ执行此操作,如下所示:

// If your ListView doesn't contain any items that have a given book as a SubItem
// then add one
if (!listView1.Items.Any(i => i.SubItems.ContainsKey(book.Name))
{
    listView1.Items.Add(lvi1);
}

由于您的编辑表明您实际上想要检查ID,而不是存储在ListItem级别,因此您只需要稍微调整条件以检查Text属性,因为{{3 }}:

if (!listView1.Items.Any(i => i.Text == book.id))
{
     listView1.Items.Add(lvi1);
}

答案 1 :(得分:1)

我想你错过了一个“!” (不是)在你的代码中。

(!listView1.Items.ContainsKey(book.id))
     {
  listView1.Items.Add(lvi1);
     }

您的代码说如果您的列表视图包含该密钥,您将添加另一个具有该密钥的条目。但似乎你想做相反的事,对吧?如果列表视图不包含具有该键的条目,则需要添加具有该键的条目。

答案 2 :(得分:1)

来自MSDN

  

密钥比较不区分大小写。 Name属性对应于ListView.ListViewItemCollection中ListViewItem的键。

因此,您必须设置Name才能使用ContainsKey

lvi1.Name = book.id.ToString();

然后其余的就像你一样:

if (!listView1.Items.ContainsKey(book.id.ToString()))
{
     listView1.Items.Add(lvi1);
}

答案 3 :(得分:0)

如果一切正常,试试这个:

    public void addToLv(Book book)
    {
        //TODO: Verifier si l'item existe avant d'ajouter
        ListViewItem lvi1 = new ListViewItem(book.id.ToString());
        //lvi1.Text = book.id.ToString();
        lvi1.SubItems.Add(book.name);
        lvi1.SubItems.Add(carte.author);

        if (!existChecker(book.id.ToString()))
            listView1.Items.Add(lvi1);
    }

    private bool existChecker(string id)
    {
        bool exist = false;

        for (int i = 0; i < lvi1.Items.Count && exist != true; i++)
        {
            if (lvi1.Items[i].SubItems[0].Text == id)
                exist = true;
        }
        return exist;
    }