我知道两种解决这个问题的方法。
1. Sort (DataGridViewColumn column, ListSortDirection direction) 函数
该函数可用于按字母顺序、数字顺序或日期顺序升序或降序排序列。
例如:
dataGridView.Sort(dataGridView1.Columns[5],ListSortDirection.Ascending)
2. Sort (IComparer comparer) 函数
此函数可用于所有其他情况,例如:
按不同于数字顺序的特定顺序对列进行排序(例如:仅使用绝对值对可能为负数或正数的金额进行排序)
按不同于字母顺序的特定顺序对列进行排序(例如:使用不区分大小写的排序对文本进行排序)
对多个列进行排序,例如将 AMOUNT 列作为第一列,DATE 列作为第二列进行表格排序。
VB.Net 示例:
Private Sub pbSort_Click(sender As Object, e As EventArgs) _
Handles pbSort.Click
grid.Sort(New AmountDateComparer(Me))
End Sub
Private Class AmountDateComparer : Implements IComparer
Private frm As FrmSearch
Public Sub New(frm As FrmSearch)
Me.frm = frm
End Sub
Public Function Compare(x1 As Object, x2 As Object) As Integer _
Implements IComparer.Compare
Dim row1 As DataGridViewRow = x1
Dim row2 As DataGridViewRow = x2
' compare AMOUNT values of columns
Dim nAmount1 = Convert.ToDecimal(row1.Cells(frm.Col_AMOUNT.Index).Value)
Dim nAmount2 = Convert.ToDecimal(row2.Cells(frm.Col_AMOUNT.Index).Value)
Dim iCompareResult As Integer
= System.Decimal.Compare(nAmount1, nAmount2)
If iCompareResult = 0 Then
'compare DATE values of columns
Dim d1 = Convert.ToDateTime(row1.Cells(frm.Col_DATE.Index).Value)
Dim d2 = Convert.ToDateTime(row2.Cells(frm.Col_DATE.Index).Value)
iCompareResult = System.DateTime.Compare(d1, d2)
End If
Return iCompareResult
End Function
End Class