重写DataGridView的sort方法 自定义排序

本文详细介绍了DataGridView控件的排序方法,包括如何通过DataSource属性进行数据绑定,并使用Sort方法进行排序。同时,展示了如何自定义排序逻辑,以及SortCompare事件在不同场景下的应用。重点在于解决实际开发中遇到的数据展示需求。
摘要由CSDN通过智能技术生成

Sort(DataGridViewColumn,ListSortDirection)重载
注意:当通过设置 DataSource 属性将 DataGridView 控件绑定到外部数据源时,Sort(DataGridViewColumn,ListSortDirection) 方法重载不能用于未绑定列。此外,当 VirtualMode 属性为 true 时,可以仅为绑定列调用此重载。若要确定某一列是否为数据绑定列,请检查 IsDataBound 属性值。

Sort(IComparer)重载
注意:仅当 DataGridView 控件未绑定到外部数据源且 VirtualMode 属性值为 false 时,Sort(IComparer) 方法重载才起作用。若要为绑定到外部数据源的列自定义排序,必须使用由该数据源提供的排序操作。在虚拟模式中,必须为未绑定列提供您自己的排序操作。
Sort(IComparer) 方法重载不设置 SortedColumn 和 SortOrder 属性,因此必须总是设置 DataGridViewColumnHeaderCell.SortGlyphDirection 属性以显示排序标志符号。
Public Class RowComparer
 Implements System.Collections.IComparer

 Private sortOrderModifier As Integer = 1

 Public Sub New(ByVal sortOrder As SortOrder)
  If sortOrder = sortOrder.Descending Then
   sortOrderModifier = -1
  ElseIf sortOrder = sortOrder.Ascending Then
   sortOrderModifier = 1
  End If
 End Sub

 Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer Implements System.Collections.IComparer.Compare
  Dim DataGridViewRow1 As DataGridViewRow = CType(x, DataGridViewRow)
  Dim DataGridViewRow2 As DataGridViewRow = CType(y, DataGridViewRow)

  ' Try to sort based on the Last Name column.
  Dim CompareResult As Integer = System.String.Compare( _
  DataGridViewRow1.Cells(1).Value.ToString(), _
  DataGridViewRow2.Cells(1).Value.ToString())

  ' If the Last Names are equal, sort based on the First Name.
  If CompareResult = 0 Then
   CompareResult = System.String.Compare( _
   DataGridViewRow1.Cells(0).Value.ToString(), _
   DataGridViewRow2.Cells(0).Value.ToString())
  End If

  Return CompareResult * sortOrderModifier
 End Function
End Class
Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
 If RadioButton1.Checked = True Then
  DataGridView1.Sort(New RowComparer(SortOrder.Ascending))
 ElseIf RadioButton2.Checked = True Then
  DataGridView1.Sort(New RowComparer(SortOrder.Descending))
 End If
End Sub

SortCompare事件
注意:当 DataSource 属性已设置时,或者当 VirtualMode 属性值为 true 时,不会发生 SortCompare 事件。
Private Sub dgv_ResultList_SortCompare(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewSortCompareEventArgs) Handles dgv_ResultList.SortCompare
 Dim val1 As String = getDBStr(e.CellValue1).ToString.Replace(",", "")
 Dim val2 As String = getDBStr(e.CellValue2).ToString.Replace(",", "")
 If IsNumeric(val1) AndAlso IsNumeric(val1) Then
  If CDec(val1) = CDec(val2) Then
   e.SortResult = 0
  ElseIf CDec(val1) < CDec(val2) Then
   e.SortResult = -1
  ElseIf CDec(val1) > CDec(val2) Then
   e.SortResult = 1
  End If
 Else
  e.SortResult = String.Compare(val1, val2)
 End If
 e.Handled = True
End Sub

DataView.Sort属性

转载于:https://www.cnblogs.com/justinsun/archive/2011/10/14/2211174.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值