如何通过单击列标题以编程方式对DataGridView进行排序

Mar*_*وان 3 c# sorting datagridview winforms

我有一个Windows窗体DataGridView,我需要在单击特定列标题时应用自定义排序,并在再次单击列标题时反转排序.

我将实现自己的排序算法,但我不清楚如何连接或触发列标题单击事件,然后跟踪应用于该列的最后一个排序,以便我可以反转排序过程.

DataGridView的数据是通过列表提供的,并且这些行是作为myList.Rows.Add(string_1, string_2, string_3)DataGridView 添加的.

请注意,这不是我的代码,我刚刚被要求为每个列实现自定义排序.

我已经在线查看过,并且未能找到示例或解释.

任何人都可以向我提供示例代码,或者指向一个好的网站,该网站显示了如何实现这一点的明确示例.

提前致谢,

马尔万

Kin*_*ing 6

这是一个有效的解决方案,我敢打赌,有更多的解决方案可以找到并希望其他人能够进入并为您提供帮助.您只需将自定义代码添加到您的SortCompare事件处理程序DataGridView并在那里执行您自己的比较函数,此比较函数有2个参数并返回-1,0或1:

private void dataGridView_SortCompare(object sender, DataGridViewSortCompareEventArgs e)
{
   if(e.Column == [your desired column]){
     e.Handled = true;
     e.SortResult = Compare(e.CellValue1, e.CellValue2);
   }
}
//Here is my compare function, it simply reverts the normal comparison result
private int Compare(object o1, object o2)
{
   return -o1.ToString().CompareTo(o2.ToString());
}
Run Code Online (Sandbox Code Playgroud)

要测试它,只需将3行添加到单列DataGridView中,例如a,b,c.通常升序(由ColumnHeader上的向上三角形表示)a,b,cCompare上面的函数c,b,a相同,它将是类似的,降序(由ColumnHeader上的向下三角形表示)是上面c,b,aCompare函数,它将是a,b,c.

您可以添加更多自己的比较功能,并为每个您喜欢的列使用每个功能.我认为重要的是如何定义这些函数,我不知道为什么要这样做,因为默认比较是正常的.