我在Visual 2013中使用多列listView控件,并使用C#进行编码。我想对多个列进行搜索,就好像我在执行数据库SELECT一样。例如,如果前三列是NAME, AGE and CITY,我可能需要搜索NAME = "Fred", AGE >= 20 and CITY = "Chicago"所在的项,然后选择该项。
发布于 2015-06-09 08:31:06
是的,这是可以做到的,您使用的是multi-column listView control,我假设它有一个数据源,如datatable。它将包含将在控件中呈现的列/行。
您可以很容易地使用Linq实现这个结果,如下所示:
dataTable.AsEnumerable
.Where(x=>x["NAME"] == "Fred")
.Where(x=>x["AGE"] >= 20)
.Where(x=>x["CITY"] == "Chicago")这里,每个x代表一个行,因为您是枚举一个DataTable的行集合。最后的结果将是IEnumerable<DataRow>类型,您需要使用它来创建独立的DataTable,而不是可以绑定到控件,我不确定是否可以绑定IEnumerable<DataRow>。
还请检查以下链接:
Linq : select value in a datatable column
添加更多详细信息以进一步帮助OP,可用的类是List,您要绑定到控件,这将使生活变得更加简单,因为它是IEnumerable类型,所以您需要在上面的Linq查询中使用这个类,如下所示:
IList<ListClass> lc = new List<ListClass>();现在lc包含用于控件绑定的所有数据,您需要做的是
var Result = lc
.Where(x=>x.Name == "Fred")
.Where(x=>x.Age >= 20)
.Where(x=>x.City == "Chicago").ToList();这里的结果将是List<ListClass>类型,根据您的要求,它包含过滤的记录,可以用于与控件绑定。
在这里,x将是Linq查询中ListClass的一个对象,类似地,您可以动态地向Linq查询提供值,并继续获取筛选的子集。所有属性都可以在intellisense中使用,因为我们有强类型对象。希望这有助于进一步澄清。
发布于 2015-06-09 09:02:53
ListView.Items的类型是ListView.ListViewItemCollection,它实现了IEnumerable,因此肯定可以使用LINQ。您可以这样做:
theListView.Items.Where(item =>
item.Text == "Fred" &&
Int32.Parse(item.SubItems[0].Text) >= 20 &&
item.SubItems[1].Text == "Chicago")https://stackoverflow.com/questions/30726413
复制相似问题