使用CollectionView过滤DataTable时出现错误的原因?
标题为。
所以我成功地使用以下方法将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
正确显示。
但是一旦我添加了Filter:
this.collectionView.Filter = new Predicate( (obj) => { return false; //Just for testing propose } );
当我执行代码时给我错误:
无法创建程序集“TestWPF,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null”中定义的“Window1”实例。 调用的目标抛出了exception。 标记文件’TestWPF; component / Window1.xaml’中的错误第1行位置9。
并输出:
PresentationFramework.dll中出现“System.NotSupportedException”类型的第一次机会exception
我还尝试将DataTable
存储转换为custom object
列表以进行过滤,但工作正常。
所以我想知道在使用DataTable
过滤时我做错了什么?
请参阅http://msdn.microsoft.com/en-us/library/ms752347.aspx#binding_to_collections
为了提高性能,ADO.NET DataTable或DataView对象的集合视图将排序和过滤委托给DataView。
BindingListCollectionView
不支持过滤。 相反,您必须使用CustomFilter属性,该属性接受filter字符串并将其用作基础DataView.RowFilter
属性的值。 字符串值是您将用于在SELECT查询中构造WHERE子句的SQL。
this.collectionView.CustomFilter = "Price > 20";
如果要使用多个条件,则必须将它们与AND或OR串在一起(就像SQL一样)。