使用CollectionView过滤DataTable时出现错误的原因?

时间:2012-02-21 21:31:44

标签: c# wpf datagrid filter

标题为。

所以我成功地将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过滤时我做错了什么?

2 个答案:

答案 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中导航,分组,排序和过滤数据