使用CollectionView筛选DataTable时出错的原因
本文关键字:出错 CollectionView 筛选 DataTable 使用 | 更新日期: 2023-09-27 18:25:16
按标题。
因此,我成功地使用将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'。异常具有被调用的目标抛出。标记文件中出错'测试WPF;component/Window1.xaml'行1位置9。
输出:
"System.NotSupportedException"类型的首次机会异常出现在PresentationFramework.dll 中
我还尝试存储并将DataTable
转换为custom object
的列表以进行筛选,但运行良好。
所以我想知道我用DataTable
过滤时做错了什么?
请参阅http://msdn.microsoft.com/en-us/library/ms752347.aspx#binding_to_collections
为了提高性能,ADO.NET DataTable或DataView对象的集合视图将排序和筛选委托给DataView。
BindingListCollectionView
不支持筛选。相反,您必须使用CustomFilter属性,该属性接受一个筛选器字符串并将其用作基础DataView.RowFilter
属性的值。字符串值是SQL,用于在SELECT查询中构造WHERE子句。
this.collectionView.CustomFilter = "Price > 20";
如果要使用多个条件,则必须使用AND或or(就像SQL一样)将它们串在一起。