【问题标题】:Why "ContainsKey" does not work when I try to prevent duplicate items to be inserted in a listview?当我试图防止在列表视图中插入重复项目时,为什么“ContainsKey”不起作用?
【发布时间】:2018-04-17 09:21:02
【问题描述】:

好的,所以我已经在任何地方搜索了如何防止插入重复的列表视图项,但是我从this question 的答案中找到了这段代码。

这就是我对代码的处理方式...

if (listView1.Items.ContainsKey(txtBrand.Text.Trim().ToString()))
{
    MessageBox.Show("This brand is already added!");
}

else if (txtBrand.Text.Trim() != "")
{
    ListViewItem list = new ListViewItem(txtBrand.Text.Trim());
    listView1.Items.Add(list);
    txtBrand.Text = null;
}

我想知道它是如何对其他人起作用但对我不起作用,还是我只是错过了什么?请帮忙

【问题讨论】:

  • 您似乎在第一行末尾缺少一些代码。你能edit加进去吗?
  • WPF 还是 WinForms?
  • 这是一个WinForm
  • 在实践中,您通常会使用数据库作为数据源。 DBMS 本身通常是放置这些限制的最佳位置。将这些类型的检查移到客户端只会导致诸如竞争条件、客户端之间的不同实现之类的问题。额外的网络负载。在这种情况下,“添加品牌”在逻辑上将是“插入并检索完整列表”操作。
  • 是的。但这不是我的情况,我在这里使用 mySQL。我使用ListView 用于多次插入,同时在用户仍在向列表中添加项目时过滤掉数据条目

标签: c# winforms


【解决方案1】:

创建ListViewItem 时,设置Name 属性。 ContainsKey 不看Text

See the documentation.

例如,这样做:

string brand = txtBrand.Text.Trim();
ListViewItem listItem = new ListViewItem(brand);
listItem.Name = brand;

【讨论】:

  • 对不起,你能改写或解释一下吗?我真的不明白
  • 当我这样做时,我无法在列表视图中插入新项目
  • @Mr.Benbenbenbenben 你得到什么错误/异常?
  • 没有,我没有得到。顺便说一句,我用你给我的代码替换了我在else if 上的代码。
  • 当您将代码替换为 Daniel A. White 的建议时,您是否确保仍将 ListViewItem 添加到 ListView 中?此外,使用断点并检查您的 ListView 是否有项目,并检查每个项目的键以及每个 ListViewItem 的 Name 属性。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-26
  • 1970-01-01
  • 1970-01-01
  • 2021-07-09
  • 2020-12-31
  • 2017-09-15
相关资源
最近更新 更多