如题。
所以我成功地把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
当我通过迭代数据进行测试时,我可以看到存储正确。
The DataGrid
当我执行代码时正确显示。
但是一旦我添加了过滤器:
this.collectionView.Filter = new Predicate<object>(
(obj) =>
{
return false; //Just for testing propose
}
);
当我执行代码时出现错误:
无法创建程序集“TestWPF”中定义的“Window1”实例,
版本=1.0.0.0,文化=中性,PublicKeyToken=null'。异常有
被调用的目标抛出。标记文件中的错误
'TestWPF;component/Window1.xaml' 第 1 行位置 9。
并输出:
“System.NotSupportedException”类型的第一次机会异常
发生在PresentationFramework.dll中
我也尝试过将商店转换为DataTable
进入一个列表custom object
用于过滤,但工作正常。
所以我想知道我在过滤时做错了什么DataTable
?
See http://msdn.microsoft.com/en-us/library/ms752347.aspx#binding_to_collections
为了提高性能,ADO.NET DataTable 或 DataView 对象的集合视图将排序和筛选委托给 DataView。
The BindingListCollectionView
不支持过滤。相反,您必须使用自定义过滤器属性,它接受一个过滤字符串并将其用作底层的值DataView.RowFilter
财产。字符串值是用于在 SELECT 查询中构造 WHERE 子句的 SQL。
this.collectionView.CustomFilter = "Price > 20";
如果你想使用多个条件,那么你必须用 AND 或 OR 将它们串在一起(就像 SQL)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)