过滤Listview中的项目

我试图使用TextBox过滤ListView的项目。
我已经设法制作了一些东西,但它只能从我的列表视图中删除项目,而不是将它们带回来。 这是我的代码的一个小例子:

 private void textBox1_TextChanged(object sender, EventArgs e) { string value = textBox1.Text.ToLower(); for (int i = listView1.Items.Count - 1; -1 < i; i--) { if (listView1.Items[i].Text.ToLower().StartsWith(value) == false) { listView1.Items[i].Remove(); } } } 

有没有人知道如何检索已删除的项目? 我似乎无法弄明白>:…

检查以下示例应用

 using System; using System.Windows.Forms; using System.Collections.Generic; using System.Linq; public partial class Form1 : Form { // keep list of listview items List Items = new List(); public Form1() { InitializeComponent(); // get initial data Items = new List(){ new Data(){ Id =1, Name ="A"}, new Data(){ Id =2, Name ="B"}, new Data(){ Id =3, Name ="C"} }; // adding initial data listView1.Items.AddRange(Items.Select(c => new ListViewItem(c.Name)).ToArray()); } private void textBox1_TextChanged(object sender, EventArgs e) { listView1.Items.Clear(); // clear list items before adding // filter the items match with search key and add result to list view listView1.Items.AddRange(Items.Where(i=>string.IsNullOrEmpty(textBox1.Text)||i.Name.StartsWith(textBox1.Text)) .Select(c => new ListViewItem(c.Name)).ToArray()); } } class Data { public int Id { get; set; } public string Name { get; set; } } 

您可以更改逻辑并首先搜索要删除的项目,然后删除它们。

 IList itemsToDelete = new List( listView1.find(delegate(string text){ return !text.ToLower().StartsWith(value); })); listView1.Remove(itemsToDelete); return itemsToDelete; 

但你必须返回另一个列表。 当您从原始列表中删除项目时,您无法恢复它。 您必须将其存储在另一个列表中。

 listBox1.Items.AddRange(listBox1.Items.Cast ().Where(X=>X.StartsWith(textBox1.Text)).ToArray()); 

链接

与ListView的工作方式相同。

希望能帮助到你