Я использовал и опирался на реализацию, которую нашел на старом посте на форуме MSDN, опубликованном несколько лет назад, но недавно я снова искал и нашел проект sourceforge под названием BindingListView . Это выглядит довольно хорошо, я просто еще не вытащил его, чтобы заменить взломанную версию.
пакет 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");