Wpf 在文本框中筛选数据网格
我搜索一个示例或示例,通过文本框过滤WPF DataGrid列元素 类似于(给定的示例使用WPFToolkit…显然被Microsoft放弃了…) XAMLWpf 在文本框中筛选数据网格,wpf,datagrid,wpfdatagrid,Wpf,Datagrid,Wpfdatagrid,我搜索一个示例或示例,通过文本框过滤WPF DataGrid列元素 类似于(给定的示例使用WPFToolkit…显然被Microsoft放弃了…) XAML 政务司司长: 公共部分类主窗口:窗口 { 私人名单人员; ICollectionView cvPersonnes; 公共主窗口() { 初始化组件(); 人员=新列表(); 添加(newpersonne(){Id=1,Nom=“Jean-Michel”,Prenom=“BADANHAR”}); 添加(newpersonne(){Id=
政务司司长:
公共部分类主窗口:窗口
{
私人名单人员;
ICollectionView cvPersonnes;
公共主窗口()
{
初始化组件();
人员=新列表();
添加(newpersonne(){Id=1,Nom=“Jean-Michel”,Prenom=“BADANHAR”});
添加(newpersonne(){Id=1,Nom=“Gerard”,Prenom=“DEPARDIEU”});
添加(newpersonne(){Id=1,Nom=“Garfild”,Prenom=“THECAT”});
添加(newpersonne(){Id=1,Nom=“Jean-Paul”,Prenom=“BELMONDO”});
cvPersonnes=CollectionViewSource.GetDefaultView(个人);
如果(cvPersonnes!=null)
{
dataGrid1.AutoGenerateColumns=true;
dataGrid1.ItemsSource=cvPersonnes;
cvPersonnes.Filter=TextFilter;
}
}
公共布尔文本过滤器(对象o)
{
人员p=(o为人员);
if(p==null)
返回false;
if(p.Nom.Contains(textBox1.Text))
返回true;
其他的
返回false;
}
}
公职人员
{
公共int Id{get;set;}
公共字符串Nom{get;set;}
公共字符串Prenom{get;set;}
}
您可以通过将数据网格绑定到支持筛选的ICollectionView
来筛选数据网格中的项
有关.NET4的详细信息。过程与.NET4.5相同,但文档似乎丢失了。在“分组、排序和筛选”标题下有一个小小的提及
编辑:在最初编写这篇文章时,WPF工具包并没有被微软抛弃。以前是它的一部分的控件现在已经在框架中了,工具箱还活着,而且做得很好我已经编写了自己的FilterDataGrid控件,它比CodeProject或其他地方提供的控件灵活得多。我既不能在这里发布完整的代码,也不能发布它 但是:由于您的数据源很可能被包装到ICollectionView中,因此您可以执行以下操作:
public void ApplyFilters()
{
ICollectionView view = CollectionViewSource.GetDefaultView(ItemsSource);
if (view != null)
{
view.Filter = FilterPredicate;
}
}
private bool FilterPredicate(object item)
{
var yourBoundItemOrRow = item as BoundItemType;
return aFilterObject.Matches(yourBoundItemOrRow);
}
基于此概念,您可以轻松实现任何过滤器逻辑。甚至是非常非常强大的过滤器。注意:在我自己的类中,这些方法都是从datagrid派生的。它们也可以适应网格之外的工作,例如在用户控件中有几种解决方案,但在我看来,最好的解决方案是只使用
DataGrid
样式而不发明新的继承DataGrid
类型的解决方案。以下是我发现的最好的:
- 选项1:我个人使用的:
- 备选案文2:
DataTable dt = new DataTable("Table1");
//fill your datatable...
//after fill...
dataGrid1.DataContext = dt;
IBindingListView blv = dt.DefaultView;
blv.Filter = "NAME = 'MOISES'";
你能看看我的代码更新吗。当用户在文本框中键入内容时,您如何进行过滤?您能否评论我的代码编辑?过滤OnTextboxTextChange是如何工作的?@vlad看起来你说得太早了,没有放弃它。放弃可能是一个错误的术语——该工具包集成到了.NET 4.0+“重新定位”可能是个更好的词…第一个链接断了。
public void ApplyFilters()
{
ICollectionView view = CollectionViewSource.GetDefaultView(ItemsSource);
if (view != null)
{
view.Filter = FilterPredicate;
}
}
private bool FilterPredicate(object item)
{
var yourBoundItemOrRow = item as BoundItemType;
return aFilterObject.Matches(yourBoundItemOrRow);
}
DataTable dt = new DataTable("Table1");
//fill your datatable...
//after fill...
dataGrid1.DataContext = dt;
IBindingListView blv = dt.DefaultView;
blv.Filter = "NAME = 'MOISES'";