如何对绑定到自定义对象集合的DataGridView进行排序?

所以我一直在关注Windows Forms控件的数据绑定这个指南 (MAD道具给作者,这个指南很棒),我用它来创建一个自定义类并将DataGridView绑定到这个类的集合:

 class CompleteJobListEntry { private string _jobName; private Image _jobStatus; private DateTime _jobAddedDate; private string _jobAddedScanner; private string _jobAddedUser; private string _jobLastActivity; private DateTime _jobActivityDate; private string _jobActivityUser; public string JobName { get { return _jobName; } set { this._jobName = value; } } public Image JobStatus { get { return _jobStatus; } set { this._jobStatus = value; } } public DateTime JobAddedDate { get { return _jobAddedDate; } set { this._jobAddedDate = value; } } public string JobAddedScanner { get { return _jobAddedScanner; } set { this._jobAddedScanner = value; } } public string JobAddedUser { get { return _jobAddedUser; } set { this._jobAddedUser = value; } } public string JobLastActivity { get { return _jobLastActivity; } set { this._jobLastActivity = value; } } public DateTime JobActivityDate { get { return _jobActivityDate; } set { this._jobActivityDate = value; } } public string JobActivityUser { get { return _jobActivityUser; } set { this._jobActivityUser = value; } } } 

此时,我从各种SQL数据库导入一堆数据来填充表格,结果很棒。 该指南甚至为添加filter提供了一个很好的起点,我打算稍后介绍一下。 但是现在,我仍然坚持对新生成的DataGridView进行排序。 环顾四周,我发现DataGridView有自己的Sort方法,可用如:

 completeJobListGridView.Sort(completeJobListGridView.Columns["JobName"], ListSortDirection.Ascending); 

但是,当我尝试这样做时,我得到一个InvalidOperationException ,告诉我“如果DataGridView控件绑定到不支持排序的IBindingList,则无法对其进行排序。” 我已经找到了IBindingList和IBindingListView接口,但是让我的类inheritance其中任何一个接口都无法解决问题。

我该怎么做呢? 我完全被困在这里……

如果您的数据在集合中,您应该能够使用BindingListView库轻松地向DGV添加排序function。 请参阅如何实现DataGridView的自动排序? 我的答案如何排序WinForms DataGridView绑定到EF EntityCollection 获取更多信息和代码片段。