我在数据网格中加载了一个对象列表:
dataGrid1.Items.Add(model);
model
成为数据库中的数据。它有Id(int)
、Name(string)
和Text(string)
在我的数据网格中,我只显示model
的名称。当我在文本框中输入内容时,我现在如何过滤数据网格?
我在这个页面:http://msdn.microsoft.com/en-us/library/vstudio/ff407126(v=vs.100).aspx但我不明白那里的代码,我不能解释我应该如何转置我的问题。
7条答案
按热度按时间zyfwsgd61#
有多种方法可以筛选集合
让我们建议这是您的项目类
你的收藏看起来
方式1(Predicate):
方式2(FilterEventHandler):
扩展信息到Way 1
如果需要多个条件或一些复杂的过滤器,您可以向Predicat添加一个方法
lawou6xi2#
这是使用ICollectionView的Filter属性的简单实现。假设您的XAML包含以下内容:
然后在构造函数中,你可以得到你的数据的默认视图,在那里你可以设置过滤 predicate ,它将对你的集合中的每一个项目执行。CollectionView不知道什么时候应该更新集合,所以必须在用户单击搜索按钮时调用Refresh。
在此url中,您可以找到CollectionViews的更详细描述:http://wpftutorial.net/DataViews.html
kd3sttzy3#
@WiiMaxx,不能评论为没有足够的代表。我会对那里的直接演员更加小心。它们可能会因为一件事而变慢,如果将相同的过滤器应用于包含不同复杂类型数据的网格,则会出现InvalidCastException。
这不会破坏您的数据网格,并且在强制转换失败时不会过滤结果。如果代码出错,对用户的影响更小。最重要的是,由于“as”操作符不像直接强制转换操作那样执行任何显式的类型强制转换,因此过滤器将更快。
apeeds0o4#
看看DataBinding -->在你的例子中,不要向你的网格中添加项目,而是设置itemssource
或
如果你想要某种过滤、排序、分组,请看CollectionView
ewm0tg9j5#
我发现了一个愚蠢的方法,知道这是一个古老的问题,但...只需在DataGrid对象的items属性上使用Filter函数。像这样:(对不起,我只学了VB)
每次在文本框中键入内容时,此属性都会更改。DG_drw_overview是DataGrid示例。在Predicate中,对象表示您放入DataGrid中的对象。
然后将SearchName绑定到文本框
将文本框的dataContext设置为主类(通常在InitializeComponent()之后)
mwg9r5ms6#
把这个留在这里,以防像我一样,你不能让上面的其他方法正常工作。
4bbkushb7#
可以使用dataview筛选器来筛选datagrid行。
其中“datatable”是提供给数据网格的数据源,使用字符串构建器构建过滤器查询,其中“Filter String”是要在数据网格中搜索的文本,并将其设置为dataview,最后将dataview设置为数据网格的itemsource并刷新它。