C# 使用bindingsource或bindinglist时对多列进行排序

C# 使用bindingsource或bindinglist时对多列进行排序,c#,data-binding,datagridview,sorting,multiple-columns,C#,Data Binding,Datagridview,Sorting,Multiple Columns,我有一个问题,我正试图解决,它的排序DataGridView在多个列。我已经读到这个选项不是DataGridView内置的功能,我必须实现它。我已经找到了多种解决方案,但没有一种能完全完成这项工作 我也是C#方面的新手,对.Net库了解不多。我也在MSDN网站上阅读了关于可能有用的不同类的信息,但没有成功 现在,让我们开门见山。我有一个DataGridView,其中有一个BindingList(最初是一个BindingSource),我想对它进行排序,但要按多个键进行排序。我的DataGrid有

我有一个问题,我正试图解决,它的排序DataGridView在多个列。我已经读到这个选项不是DataGridView内置的功能,我必须实现它。我已经找到了多种解决方案,但没有一种能完全完成这项工作

我也是C#方面的新手,对.Net库了解不多。我也在MSDN网站上阅读了关于可能有用的不同类的信息,但没有成功

现在,让我们开门见山。我有一个DataGridView,其中有一个BindingList(最初是一个BindingSource),我想对它进行排序,但要按多个键进行排序。我的DataGrid有9列,用户应该能够对任何列进行排序。例如,假设我的Datagrid有3列,分别命名为:Index、ID、Name。用户希望按名称进行隐式排序,下一个顺序是Index,然后是ID。因此,如果两个名称相同,则Index应该是下一个排序选项


您知道如何做到这一点吗?

BindingSource对象有一个Sort属性,允许您按照所需的任何属性对其对象集合进行排序,就像SQL中的ORDER by子句一样。排序之后,我认为您可能应该通过refresh()方法刷新DataGridView


你已经试过了吗?

这正是我要建议的。我想我可以补充一点细节。基本上,一旦用户单击标题进行排序,您就可以使用鼠标单击事件处理程序捕获此事件。然后更新Datagrids视图。感谢您的评论!这就证实了这是一个很好的方法。两个头比一个头好!=)嗯,我确实没有试过,但它似乎不能解决我的问题。我举个例子。我有两个条目,分别是“2,10,一本书”和“1,11,D书”。如果用户单击名称列标题,条目将保持相同的顺序。在我的例子中,我希望第二个条目(索引为1)排在第一位,给出如下内容:ORDER BY‘column header BY user clicked’、‘其他最左边的列’等等。有一个事件可以引发ColumnHeader_Click()或类似的内容。在这段代码中,您可以对BindingSource进行排序,然后刷新()显示。