簡體   English   中英

在列表視圖中搜索子項

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM