VS:使 BindingList 可排序

Jul*_*i15 0 c# sorting gridview datasource visual-studio

我正在使用 C# 和 Visual Studio 制作一个项目。问题是我正在使用我想要排序的 GridView(在这种情况下是 Prototype Code 列),我创建了一个按钮,它执行以下操作:

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

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

System.InvalidOperationException: '如果 DataGridView 控件绑定到不支持排序顺序的 IBindingList,则无法对其进行排序。'

我有Prototypes.Datasource,我想这就是我必须改变的东西才能使它可排序,但是如何?我会感谢您的帮助,谢谢!

Gyö*_*zeg 5

如您所见,基BindingList不支持排序。你必须自己实现它。

  1. 简单的解决方案是派生一个支持排序的新类。请参阅此处的简单示例。

  2. 但就我自己而言,我更喜欢CSLA 的解决方案,这是对所需接口的全新重新实现,因为它提供了一个排序视图,而不是修改原始的底层集合。

用法:

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

另请注意,您实际上并不需要创建一个,SortButton因为如果提供的数据源支持排序,那么DataGridView标题将是可点击的并且它会自动显示排序方向 - 请参阅第一个链接中的图像。


2020 年更新:

去年我将我的库开源,所以你也可以使用 my SortableBindingList<T>,它也修复了原始库的性能问题BindingList。您可以从NuGet下载它。

  • 感谢您将您的库开源! (2认同)