VS:使 BindingList 可排序

VS: Make BindingList sortable

我正在用 C# 和 Visual Studio 制作一个项目。问题是我正在使用我想要排序的 GridView(在本例中为原型代码列),我创建了一个执行此操作的按钮:

 void SortButton_Click(Object sender, EventArgs e)
        {
            dataGridView1.Sort(PrototypeCodeDataGridViewTextBoxColumn, System.ComponentModel.ListSortDirection.Ascending);
        }

但是在按下按钮的那一刻我得到了这个:

System.InvalidOperationException: 'A DataGridView control can not be ordered if it is bound to an IBindingList that does not support the sort order.'

我有 Prototypes.Datasource,我想这就是我必须更改以使其可排序的内容,但如何更改? 感谢您的帮助,谢谢!

如您所见,基数 BindingList class does not support 排序。必须自己实现。

  1. 简单的解决方案是派生一个新的 class,它支持排序。看一个简单的例子here.

  2. 但我自己更喜欢 CSLA's solution,这是对所需接口的全新重新实现,因为它提供了一个排序视图,而不是修改原始底层 collection。

用法:

var myBindingSource = new SortedBindingList<MyType>(myCollection);
myBindingSource.ApplySort(propertyName, ListSortDirection.Ascending);
dataGridView1.DataSource = myBindingSource;

另请注意,您实际上并不需要创建 SortButton,因为如果提供的数据源支持排序,那么 DataGridView header 将是可点击的,并且它会自动显示排序方向 - 请先查看 link.

中的图像

2020 年更新:

去年我将我的库开源,这样你也可以使用我的 SortableBindingList<T>, which fixes the performance problem of the original BindingList as well. You can download it from NuGet