VS:使BindingList可排序

时间:2018-06-14 14:22:11

标签: c# visual-studio sorting gridview datasource

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

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

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

  

System.InvalidOperationException:' DataGridView控件不能   如果绑定到不支持的IBindingList,则命令   排序顺序。'

我已经获得了 Prototypes.Datasource ,我想我必须改变它以使其可以排序,但是如何? 我感谢您的帮助,谢谢!

1 个答案:

答案 0 :(得分:2)

如您所见,基础BindingListdoes not support排序。你必须自己实现它。

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

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

  3. 用法:

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

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