首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用listView控件执行多列搜索c#控件中的项。

使用listView控件执行多列搜索c#控件中的项。
EN

Stack Overflow用户
提问于 2015-06-09 08:10:42
回答 2查看 717关注 0票数 0

我在Visual 2013中使用多列listView控件,并使用C#进行编码。我想对多个列进行搜索,就好像我在执行数据库SELECT一样。例如,如果前三列是NAME, AGE and CITY,我可能需要搜索NAME = "Fred", AGE >= 20 and CITY = "Chicago"所在的项,然后选择该项。

  • 做这件事最有效的方法是什么?
  • 能用林克吗?
  • 还有另一种方法不需要遍历整个项集合并测试每个列值吗?感谢你的帮助。
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-06-09 08:31:06

是的,这是可以做到的,您使用的是multi-column listView control,我假设它有一个数据源,如datatable。它将包含将在控件中呈现的列/行。

您可以很容易地使用Linq实现这个结果,如下所示:

代码语言:javascript
复制
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

LINQ query on a DataTable

添加更多详细信息以进一步帮助OP,可用的类是List,您要绑定到控件,这将使生活变得更加简单,因为它是IEnumerable类型,所以您需要在上面的Linq查询中使用这个类,如下所示:

代码语言:javascript
复制
IList<ListClass> lc = new List<ListClass>();

现在lc包含用于控件绑定的所有数据,您需要做的是

代码语言:javascript
复制
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中使用,因为我们有强类型对象。希望这有助于进一步澄清。

票数 0
EN

Stack Overflow用户

发布于 2015-06-09 09:02:53

ListView.Items的类型是ListView.ListViewItemCollection,它实现了IEnumerable,因此肯定可以使用LINQ。您可以这样做:

代码语言:javascript
复制
theListView.Items.Where(item =>
    item.Text == "Fred" &&
    Int32.Parse(item.SubItems[0].Text) >= 20 &&
    item.SubItems[1].Text == "Chicago")
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30726413

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档