[英]Searching for subitems in listview
我知道這里已經有一個關於在listview中搜索子項的問題,但是對於像我這樣的新手來說有點復雜。 我做了一個帶有listview的簡單Windows窗體應用程序,在listview中有兩列名為:“名稱”和“年齡”。 我設法搜索了子項目,但它首先搜索了第一列中的項目,然后是子項目。 這是代碼:
private void btnSearch_Click(object sender, EventArgs e)
{
for (int i = 0; i <=listView1.Items.Count-1; i++)
{
foreach(ListViewItem.ListViewSubItem subitem in listView1.Items[i].SubItems)
{
if (subitem.Text.Equals(txtSearch.Text))
{
MessageBox.Show("Subitem found!");
}
else
{
MessageBox.Show("Subitem not found!");
}
}
}
}
(在列表視圖中假設名稱:“ John”,年齡:“ 17”)
輸入:
txt搜索:17
輸出:
找不到子項目! //因為它首先在第一列中搜索(John)
找到子項目! //因為現在已經檢測到該子項
如果我刪除“ MessageBox.Show(“未找到子項目!”)“並輸入正確的輸入,當然它將顯示它已找到該項目,但是如果我輸入不正確的輸入則不會執行任何操作。 知道如何直接搜索子項嗎? 謝謝。
有幾種方法可以解決此問題,第一種方法(長手)是對當前方法的略微改動。
private void btnSearch_Click(object sender, EventArgs e)
{
var isResultFound = false;
for (int i = 0; i <=listView1.Items.Count-1; i++)
{
foreach(ListViewItem.ListViewSubItem subitem in listView1.Items[i].SubItems)
{
if (subitem.Text.Contains(txtSearch.Text))
{
isResultFound = true;
break;
}
}
if(isResultFound) break;
}
if(isItemFound)
{
MessageBox.Show("Found!");
}
else
{
MessageBox.Show("Not found!");
}
一種替代方法是使用Linq查詢項目。
private void btnSearch_Click(object sender, EventArgs e)
{
var isResultFound = listView1.Items.Any(i=>
i.SubItems.Any(si=>
si.Text.Contains(txtSearch.Text)));
if(isItemFound)
{
MessageBox.Show("Found!");
}
else
{
MessageBox.Show("Not found!");
}
實際上,這個新的Linq表達式與for循環的作用相同,只是方式更為簡潔。
在首次發現您的搜索值之后,這兩個示例都將停止循環循環。
我還使用了Contains選項而不是Equals來查找條目在值內的結果,例如在句子中。
編輯:Ken在他的評論中的鏈接是您可以使用的另一種選擇。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.