标题为。
所以我成功地将DataTable
放入我的CollectionView
并使用:
ICollectionView _collectionView { get; set; }
public ICollectionView collectionView {......}
DataTable myDataTable= new DataTable();
myConnection.Open();
dbAdpater.Fill(myDataTable);
myConnection.Close();
var collectionList= (newLeadTable as IListSource).GetList();
this.collectionView = CollectionViewSource.GetDefaultView(collectionList);
我知道列表中的每个对象都是DataRowView
,并且我通过迭代数据进行测试,我可以看到存储正确。
执行代码时,DataGrid
显示正确。
但是一旦我添加了过滤器:
this.collectionView.Filter = new Predicate<object>(
(obj) =>
{
return false; //Just for testing propose
}
);
当我执行代码时给出错误:
无法创建程序集'TestWPF中定义的'Window1'实例, Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null'。例外有 被调用的目标抛出。标记文件出错 'TestWPF; component / Window1.xaml'Line 1 Position 9。
输出:
“System.NotSupportedException”类型的第一次机会异常 发生在PresentationFramework.dll
中
我还尝试存储将DataTable
转换为custom object
列表以进行过滤,但工作正常。
所以我想知道在使用DataTable
过滤时我做错了什么?
答案 0 :(得分:2)
请参阅http://msdn.microsoft.com/en-us/library/ms752347.aspx#binding_to_collections
为了提高性能,ADO.NET DataTable或DataView对象的集合视图将排序和过滤委托给DataView。
BindingListCollectionView
不支持过滤。相反,您必须使用带有过滤器字符串的CustomFilter属性,并将其用作基础DataView.RowFilter
属性的值。字符串值是您将用于在SELECT查询中构造WHERE子句的SQL。
this.collectionView.CustomFilter = "Price > 20";
如果你想使用多个条件,那么你必须用AND或OR将它们串起来(就像SQL一样)。
答案 1 :(得分:0)
您是否在
上看到了这篇文章http://wpftutorial.net/DataViews.html 如何在WPF中导航,分组,排序和过滤数据