Почему ошибки, когда фильтры DataTable с CollectionView? - PullRequest
2 голосов
/ 22 февраля 2012

Под названием.

Итак, мне удалось положить 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
                }
            );

Когда я выполняю код, выдает ошибку:

Невозможно создать экземпляр Window1, определенный в сборке TestWPF, Версия = 1.0.0.0, Культура = нейтральная, PublicKeyToken = null '. Исключение имеет был брошен целью вызова. Ошибка в файле разметки 'TestWPF; component / Window1.xaml' Строка 1, Позиция 9.

И вывод:

Первое исключение типа «System.NotSupportedException» произошло в PresentationFramework.dll

Я также пытался хранить, преобразует DataTable в список custom object для фильтрации, но работает нормально.

Так что мне интересно, что я сделал не так при фильтрации с DataTable?

Ответы [ 2 ]

2 голосов
/ 22 февраля 2012

См. http://msdn.microsoft.com/en-us/library/ms752347.aspx#binding_to_collections

Для повышения производительности представления коллекций для объектов ADO.NET DataTable или DataView делегируют сортировку и фильтрацию DataView.

BindingListCollectionView не поддерживает фильтрацию. Вместо этого вы должны использовать свойство CustomFilter , которое принимает строку фильтра и использует ее в качестве значения для базового свойства DataView.RowFilter. Строковое значение - это SQL, который вы использовали бы для создания предложения WHERE в запросе SELECT.

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

Если вы хотите использовать несколько условий, вы должны связать их вместе с AND или OR (точно так же, как SQL).

0 голосов
/ 22 февраля 2012

Вы видели эту статью на

http://wpftutorial.net/DataViews.html Как перемещаться, группировать, сортировать и фильтровать данные в WPF

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...