通过文本框过滤listview项目中的单词

时间:2014-05-18 12:08:49

标签: c# listview filter

我有一个ListView项目,我想制作一个过滤器,它只显示包含TextBox中写的单词的项目。我试过了:

bool containsAnyLetter = textBox2.Text.IndexOfAny(letters) >= 0;

填写ListView的代码:

private void button1_Click_1(object sender, EventArgs e)
{
    listView1.Items.Clear();
    listView2.Items.Clear();
    int places, count;
    string keyword, site;
    count = 1;
    keyword = keywords.Text;
    site = sites.Text;
    places = Convert.ToInt32(textBox1.Text);
    var client = new GwebSearchClient("http://www.google.com");
    var results = client.Search(keyword, places);
    foreach (var webResult in results)
    {
        ListViewItem item = listView1.Items.Add(count++ + "  " + webResult.ToString());

        item.SubItems.Add(string.Empty);            

        ListViewItem itemz = listView2.Items.Add(webResult.Url.ToString());
        listView1.FullRowSelect = true;
    }
}

现在我想做类似的事情,但它必须将当前的listview项目交换为仅包含TextBox中的单词的项目。

if (listView2.Items.ToString().Contains(textBox2.Text))
{
    //the should exchange the listview items for a that one's which contains a word from a textbox.
}

但它似乎并没有奏效。有没有其他方法可以找到并显示TextBox中包含单词的项目?

2 个答案:

答案 0 :(得分:3)

另一种方法是将ListView项目转换为IEnumerable并使用Linq进行查询。

IEnumerable<ListViewItem> lv = listViewItems.Items.Cast<ListViewItem>();

var matchingItems = lv.Where(i => i.Text.Contains(textBoxCriteria.Text));

答案 1 :(得分:1)

您可以遍历Listbox并检查该项是否包含该字词,但您无法隐藏该项目,因为ListBox无法执行此操作。你必须选择:
1.隐藏实际的ListBox并在同一位置创建一个新的OR 2.使用WPF 使用此代码检查项目是否包含文本框中的文本:

foreach (var listBoxItem in listBox1.Items)
{
    if(listBoxItem.ToString().Contains(txtBox.Text))
    {
        //Item contains word, do something
    }
}