我对C#中的Listview有一些疑问 我的列表视图包含2列,如下所示:
colDATA1 colDATA2
Value1 Amount1
Value2 Amount2
Value3 Amount3
Value4 Amount4
我想要做的是在Listview中搜索Amount5
如果不存在则执行某些操作。如果存在则返回Value5
我正在尝试搜索和使用这样的代码:
If (Listview1.items.containskey("Amount5"))
{}
else
{MessageBox.show("Not Found")}
or if exist then return the value5 *I have no idea how to do.
我在谷歌搜索这个,但大多数只有1列,当我使用代码时,代码无法正常工作。
My question is :
1. How can I get Value5 if Amount5 exist.
谢谢。
添加项目的代码
First Set listView1 Property "View : Details" Then Using this code
this.Listview1.Items.Add(new ListViewItem(new string[] { Value1, Amount1 }));
答案 0 :(得分:1)
OP已经明白了,但这只是为了将来参考,以防有人需要它。
缺少OP的是ListView将其项目作为Items属性中的对象保存。
If (Listview1.items.containskey("Amount5"))
{}
else
{MessageBox.show("Not Found")}
containsKey通常在类似字典的数据结构中。但是,ListView控制器的Items是ItemCollection(对于可以使用DataGrid的字典)
在你的情况下,我会使用Linq。
// Returns the first item that satisfies the condition or null if none does.
ListViewItem found = items.FirstOrDefault(i => i.SubItems[1].Text.Equals("Amount5"));
if(found != null) {
MessageBox.Show(found.SubItems[0].Text.ToString());
}
else {
MessageBox.Show("Not Found!");
}
你仍然可以使用for循环来做同样的事情。
如果我想使用foreach循环(因为Linq不能直接在ListView.Item上使用)
ListViewItem found = null;
foreach (ListViewItem item in listView1.Items) {
if (item.SubItems[1].Text.Equals("Amount5")) {
// If a match was found break the loop.
found = item;
break;
}
}
if (found != null) {
MessageBox.Show(found.SubItems[0].Text.ToString());
}
else {
MessageBox.Show("Not Found!");
}
希望这有帮助!