在 WPF 中过滤 DataGrid [英] Filter a DataGrid in WPF
问题描述
我用这个加载数据网格中的对象列表:
I load a lists of objects in a datagrid with this:
dataGrid1.Items.Add(model);
model
成为数据库中的数据.它有一个 Id(int)
、Name(string)
和 Text(string)
The model
become data from a database. It has a Id(int)
, Name(string)
and Text(string)
在我的数据网格中,我只显示了 model
的名称.当我在文本框中输入内容时,我现在如何过滤数据网格?
In my datagrid I show only the Name of the model
. How can I filter the datagrid now, when I enter something in a textbox?
我在这个页面:http://msdn.microsoft.com/en-us/library/vstudio/ff407126(v=vs.100).aspx 但我不明白那里的代码,我无法解释我应该如何转置那是我的问题.
I was at this page: http://msdn.microsoft.com/en-us/library/vstudio/ff407126(v=vs.100).aspx but I don't understand the code from there and I can not explain how I should transpose that for my problem.
推荐答案
有多种过滤集合的方式
让我们建议这是您的项目类别
let's suggesting this is your Item Class
public class Model
{
public string Name
{
get;
set;
}
}
你的收藏看起来像
var ObColl = new ObservableCollection<Model>();
ObColl.Add(new Model() { Name = "John" });
ObColl.Add(new Model() { Name = "Karl" });
ObColl.Add(new Model() { Name = "Max" });
ObColl.Add(new Model() { Name = "Mary" });
方式 1(谓词):
public MainWindow()
{
InitializeComponent();
// Collection which will take your ObservableCollection
var _itemSourceList = new CollectionViewSource() { Source = ObColl };
// ICollectionView the View/UI part
ICollectionView Itemlist = _itemSourceList.View;
// your Filter
var yourCostumFilter= new Predicate<object>(item => ((Model)item).Name.Contains("Max"));
//now we add our Filter
Itemlist.Filter = yourCostumFilter;
dataGrid1.ItemsSource = Itemlist;
}
方式 2 (FilterEventHandler):
public MainWindow()
{
InitializeComponent();
// Collection which will take your Filter
var _itemSourceList = new CollectionViewSource() { Source = ObColl };
//now we add our Filter
_itemSourceList.Filter += new FilterEventHandler(yourFilter);
// ICollectionView the View/UI part
ICollectionView Itemlist = _itemSourceList.View;
dataGrid1.ItemsSource = Itemlist;
}
private void yourFilter(object sender, FilterEventArgs e)
{
var obj = e.Item as Model;
if (obj != null)
{
if (obj.Name.Contains("Max"))
e.Accepted = true;
else
e.Accepted = false;
}
}
将信息扩展到方式 1
如果需要多个条件或一些复杂的过滤器,您可以向您的 Predicat 添加一个方法
extended Information to Way 1
if need multiple conditions or some complex Filter you can add a method to your Predicat
// your Filter
var yourComplexFilter= new Predicate<object>(ComplexFilter);
private bool ComplexFilter(object obj)
{
//your logic
}
这篇关于在 WPF 中过滤 DataGrid的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!