Общие реализации IBindingListView
-
09-06-2019 - |
Вопрос
Может ли кто-нибудь предложить хорошую реализацию общего класса коллекции, реализующего IBindingListView
& IBindingList
интерфейсы и предоставляет возможности фильтрации и поиска?
Я вижу свои текущие варианты как:
- Использование класса, который написал и протестировал кто-то другой.
- Наследование от
BindingList<T>
, и реализацииIBindingListView
интерфейсы - Напишите собственную коллекцию с нуля, реализовав
IBindingListView
иIBindingList
.
Очевидно, что первый вариант — мой предпочтительный выбор.
Решение
Я использовал и развивал реализацию, которую нашел, и старый пост на форуме MSDN, сделанный несколько лет назад, но недавно я снова поискал и нашел проект sourceforge под названием Список привязокView.Выглядит довольно красиво, просто я еще не подключил его на замену взломанной версии.
пакет nuget: Equin.ApplicationFramework.BindingListView
Пример кода:
var lst = new List<DemoClass>
{
new DemoClass { Prop1 = "a", Prop2 = "b", Prop3 = "c" },
new DemoClass { Prop1 = "a", Prop2 = "e", Prop3 = "f" },
new DemoClass { Prop1 = "b", Prop2 = "h", Prop3 = "i" },
new DemoClass { Prop1 = "b", Prop2 = "k", Prop3 = "l" }
};
dataGridView1.DataSource = new BindingListView<DemoClass>(lst);
// you can now sort by clicking the column headings
//
// to filter the view...
var view = (BindingListView<DemoClass>)dataGridView1.DataSource;
view.ApplyFilter(dc => dc.Prop1 == "a");
Другие советы
Вот помощь для вашего метода 2 и 3 за кулисами:Реализация фильтрации для привязки данных Windows Forms
Несколько решений, которые я могу придумать:
А Дозвуковой проект имеет довольно хорошую реализацию
BindlingList<T>
который имеет открытый исходный код.Хотя для использования их реализации может потребоваться использование всего двоичного файла SubSonic.Мне нравится использовать классы из Коллекции силы проект.Там довольно просто наследовать одну из базовых коллекций и реализовать
IBindingListView
.