VS:使绑定列表可排序



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

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

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

System.InvalidOperationException: 'DataGridView 控件不能 如果绑定到不支持 排序顺序。

我有原型.数据源,我假设这就是我必须更改以使其可排序的内容,但是如何更改呢? 我会感谢您的帮助,谢谢!

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

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

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

用法:

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

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


2020年更新:

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

最新更新