gpt4 book ai didi

c# - 为什么使用 CollectionView 过滤 DataTable 时出错?

转载 作者:太空宇宙 更新时间:2023-11-03 11:25:49 26 4
gpt4 key购买 nike

如题。

所以我成功地将 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
}
);

当我执行代码时出现错误:

Cannot create instance of 'Window1' defined in assembly 'TestWPF, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'. Exception has been thrown by the target of an invocation. Error in markup file 'TestWPF;component/Window1.xaml' Line 1 Position 9.

并输出:

A first chance exception of type 'System.NotSupportedException' occurred in PresentationFramework.dll

我还尝试将 DataTable 存储转换为 自定义对象 列表以进行过滤,但工作正常。

所以我想知道我在使用DataTable过滤时做错了什么?

最佳答案

参见 http://msdn.microsoft.com/en-us/library/ms752347.aspx#binding_to_collections

To improve performance, collection views for ADO.NET DataTable or DataView objects delegate sorting and filtering to the DataView.

BindingListCollectionView 不支持过滤。相反,您必须使用 CustomFilter属性,它采用过滤器字符串并将其用作基础 DataView.RowFilter 属性的值。字符串值是您将用于在 SELECT 查询中构造 WHERE 子句的 SQL。

this.collectionView.CustomFilter = "Price > 20";

如果要使用多个条件,则必须用 AND 或 OR 将它们串在一起(就像 SQL 一样)。

关于c# - 为什么使用 CollectionView 过滤 DataTable 时出错?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9385489/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com