![]() |
Модераторы: Partizan, gambit |
![]() ![]() ![]() |
|
thomas |
|
|||
![]() Доцент... почти ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1385 Регистрация: 3.10.2006 Где: " Сказочное королевство" Репутация: 6 Всего: 65 |
Приветствую уважаемое сообщество.
В приложении использую классы для описания объектов (один объект = запись в таблице БД). Для получения всех записей из таблицы использую методы, которые возвращают List<T> . Это все реализовано в бизнес слое приложения. В слое представления для отображения данных и реализации навигации по записям использую BindingSource, которые передаются DataGridView в качестве источника данных. Все работает. Но вот возникла необходимость при отображении данных в табличной форме фильтровать их по тому или иному параметру (столбцу). К примеру - в DataGridView отображены все фактуры клиента, фактура может быть оплачена или не оплачена, пользователь жмет кнопочку и в DataGridView отображаются только не оплаченнные фактуры данного клиента. Пытаюсь фильтровать BindingSource присваивая его свойству Filter необходимое значение. Но ничего не происходит. Вот тут смотрел в первую очередь. Но это ничего не дало, так как там пример дан с DataView, а я присваиваю свойству DataSource моего BindingSource заполненный BindingList<T>, которому в качестве значения присваивается результат работы метода класса из бизнес слоя приложения в виде List<T>. Прошу помощи у уважаемого сообщества. Подскажите в чем может быть проблема и как ее решить. Потому как в приложении нужно будет реализовать еще много раз фильтрацию данных по заданным параметрам. Да DataSet-ы в приложении не используются вообще. Все реализовано через коллекции List<T>. А в слое представления через BindingList<T> и BindingSource. Заранее благодарю. -------------------- Крепко жму горло, искренне ваш Thomas. (С)vingrad Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну! Проблемы негров шерифа не волнуют. |
|||
|
||||
thomas |
|
|||
![]() Доцент... почти ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1385 Регистрация: 3.10.2006 Где: " Сказочное королевство" Репутация: 6 Всего: 65 |
Это код котрый сейчас в приложении.
Два метода срабатывают на ура, загрузка формы(конструктор) и SetupBinding() А вот код в обработчике события "нажать кнопку" не срабатывает.
может я там много чего лишнего понаписал или надо как-то по другому? Это сообщение отредактировал(а) thomas - 13.3.2009, 17:46 -------------------- Крепко жму горло, искренне ваш Thomas. (С)vingrad Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну! Проблемы негров шерифа не волнуют. |
|||
|
||||
Partizan |
|
|||
![]() Let's do some .NET ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2828 Регистрация: 19.12.2005 Где: Санкт-Петербург Репутация: 18 Всего: 67 |
thomas, это решение проблемы? или это ваш код, который не работает?
-------------------- СУВ, Partizan. |
|||
|
||||
thomas |
|
|||
![]() Доцент... почти ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1385 Регистрация: 3.10.2006 Где: " Сказочное королевство" Репутация: 6 Всего: 65 |
Partizan,
Это код который не работает. Имею ввиду код события (нажать кнопку Button1) ЗЫ добавлял код с другого компа, поэтому в саму тему код не попал, а добавился отдельным постом. Упс, извиняюсь. Это сообщение отредактировал(а) thomas - 13.3.2009, 17:48 -------------------- Крепко жму горло, искренне ваш Thomas. (С)vingrad Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну! Проблемы негров шерифа не волнуют. |
|||
|
||||
diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 31 Всего: 142 |
Для того, чтобы коллекция поддерживала фильтрацию, надо чтобы в ней был реализован интерфейс
System.ComponentModel.IBindingListView. -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит ![]() |
|||
|
||||
thomas |
|
||||
![]() Доцент... почти ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1385 Регистрация: 3.10.2006 Где: " Сказочное королевство" Репутация: 6 Всего: 65 |
diadiavova,
приветствую. в msdn вот по этому ms-help://MS.MSDNQTR.v90.ru/fxref_system.windows.forms/html/7a1ee03a-f316-f86f-a007-8891c1965901.htm адресу НАПИСАНО
это означает что в классе BindingSource РЕАЛИЗОВАН интерфес, на который вы мне указываете. Иначе, насколько я понимаю, у этого класса не было бы свойства Filter. Так вот, вопрос остается открытым. Что я делаю не так и что надо сделать, чтобы ПРОИЗВОДИЛАСЬ ФИЛЬТРАЦИЯ? ЗЫ в статье про IBindingListView написано
Это сообщение отредактировал(а) thomas - 14.3.2009, 00:18 -------------------- Крепко жму горло, искренне ваш Thomas. (С)vingrad Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну! Проблемы негров шерифа не волнуют. |
||||
|
|||||
diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 31 Всего: 142 |
Я написал о коллекции BindingList. у биндингсорса есть свойство SupportsFiltering, о возвращаемом значении этого свойства написано
-------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит ![]() |
|||
|
||||
thomas |
|
||||
![]() Доцент... почти ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1385 Регистрация: 3.10.2006 Где: " Сказочное королевство" Репутация: 6 Всего: 65 |
diadiavova,
Я про Фому
а ты про Ерёму
Ладно, это все лирика ![]() Будем проверять свойство SupportsFiltering своего BindingSource. -------------------- Крепко жму горло, искренне ваш Thomas. (С)vingrad Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну! Проблемы негров шерифа не волнуют. |
||||
|
|||||
diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 31 Всего: 142 |
На самом деле я про того же фому, ты просто меня не понял. Биндингсорс никаких чудес не творит, если в источнике реализован указанный интерфейс, то он будет фильтровать, а если нет - то будет возникать как раз та проблема, из-за которой ты создал тему. Возьми вместо биндинглист таблицу и будет тебе счастье.
Добавлено через 9 минут и 54 секунды Точнее не таблицу напрямую, DataView. -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит ![]() |
|||
|
||||
thomas |
|
||||
![]() Доцент... почти ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1385 Регистрация: 3.10.2006 Где: " Сказочное королевство" Репутация: 6 Всего: 65 |
diadiavova,
приветствую. То что ты советуешь
не покатит
В приложении два слоя: слой данных и слой представления. В слое данных на каждый объект написан класс, который представляет одну запись из той или иной таблицы, в нем есть статические методы, которые выдают коллекцию объектов, считав записи из БД посредством dataReader. В слое представления данные отображаются. Никаких DataSet, DataTable, DataView в приложении нет и не будет. -------------------- Крепко жму горло, искренне ваш Thomas. (С)vingrad Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну! Проблемы негров шерифа не волнуют. |
||||
|
|||||
diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 31 Всего: 142 |
Тогда для фильтрации можно выбирать из листа нужные записи методом FindAll, создавать на их основе биндинглист и передавать его дэйтасорсу грида. Как это выглядит с точки зрения кривизны реализации и производительности - не знаю, но на небольшом примере пробовал - работает
что-то в этом роде. -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит ![]() |
|||
|
||||
thomas |
|
||||
![]() Доцент... почти ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1385 Регистрация: 3.10.2006 Где: " Сказочное королевство" Репутация: 6 Всего: 65 |
diadiavova,
привет. С точки зрения кривизны и производительности
Программа построена по его "схеме", которую он описывает в .NET Magazin за 2007 год (блин ссылки нет под рукой) Если ты внимательно смотрел на код метода SetupBinding, то там видно что для получения клиентов используется как раз то о чем ты говоришь.
Для этого в классе формы написан вложенный приватный класс ContactFilter, для фильтрации контактов. Контакт может быть поставщиком или клиентом. В данном случае нужны были клиенты. Значит придется писать еще один класс - фильтр для фактур и по нажатию кнопочки перезаполнять BindingList<KlantFactuur> factuurList = new BindingList<KlantFactuur>(KlantFactuur.GetEntityList(klant.ContactId).FindAll(фильтр для фактур)); вот таким макаром. Короче танцы с бубном. А интересно какие коллекции реализуют этот хитрый интерфейс(IBindingListView)? Почему спрашиваю? Потому как, класс BindingSource является наследником этого интерфейса, но он получает коллекцию BindingList<T>, а тот в свою очередь получает List<T>. И получается что, свойство класса наследника интерфейса не работает. Так на фига нужно это свойство? ![]() Короче, дело ясное, что дело темное. ![]() Пойду плясать с бубном. ![]() -------------------- Крепко жму горло, искренне ваш Thomas. (С)vingrad Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну! Проблемы негров шерифа не волнуют. |
||||
|
|||||
diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 31 Всего: 142 |
К сожалению, порадовать особо нечем. Кроме BindingSource и DataView этот интерфейс нигде не реализован. При этом биндингсорс - просто посредник, а дэйтавью ориентирован на работу с таблицами. -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит ![]() |
|||
|
||||
thomas |
|
|||
![]() Доцент... почти ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1385 Регистрация: 3.10.2006 Где: " Сказочное королевство" Репутация: 6 Всего: 65 |
В общем проблему фильтра решил таким образом.
Написал вложенный класс. Потом подсовываю его Predicate-у и при помощи метода FindAll для List<Т> нахожу все неоплаченные фактуры для заданного клиента.
Будем считать что данная конкретная задача решена. Но вопрос об использовании свойства Filter для BindingSource при использовании в качестве источника данных коллекции вместо DataView (как в примерах в msdn ) остался открытым. diadiavova спасибо за участие . Это сообщение отредактировал(а) thomas - 14.3.2009, 23:16 -------------------- Крепко жму горло, искренне ваш Thomas. (С)vingrad Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну! Проблемы негров шерифа не волнуют. |
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |