DotNet · 2022年5月15日

DataGridView行的排序方法

注意:DataGridView控件是从.NET
Framework 2.0版本开始追加的。

在这里介绍和通常排序不一样的排序方法。通常指定排序的方法有很多种。在DataGridView中实现排序的方法有,使用Sort对象指定IComparer方法、使用SortCompare事件的方法。DataGridView的DataSource属性中设定DataSource时,通过DataView.Sort属性设定排序的方法等。下面介绍几种经常使用的方法。

DataGridView.Sort对象的使用方法

这个方法在DataGridView的DataSource属性没有被设定,VirtualMode属笥为False时可以使用。

变更使用DataGridView.Sort方法排序的列,可以使用IComparer实现。下面的例子是最先和索引0号码的列比较,如果一样就继续和下一列比较,然后排序的代码。首先,作成IComparer的Interface实例化的类。

[VB.NET]

 'Icomparer的Interface实例化,排序的方法定义的类
 Public Class CustomComparer
     Implements IComparer
     Private sOrder As Integer
     Private comparer As Comparer
      Public Sub New(ByVal order As SortOrder)
         Me.sOrder = IIf(order = SortOrder.Descending, -1, 1)
         Me.comparer = New Comparer( _
System.Globalization.CultureInfo.CurrentCulture)
     End Sub
 
     '定义排序的方法
     
Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer  _
 Implements  System.Collections.IComparer.Compare
         
Dim result As Integer = 0
         Dim rowx As DataGridViewRow = CType(x, DataGridViewRow)
         Dim rowy As DataGridViewRow = CType(y, DataGridViewRow)      
    '比较第一列的单元格的值,如果一样继续比较下一列
         For i As Integer = 0 To rowx.Cells.Count - 1
             result = Me.comparer.Compare( _
                 rowx.Cells(i).Value,   rowy.Cells(i).Value)
             If result <> 0 Then
                 Exit For
             End If
         Next i        
'返回结果
         Return result * 
Me.sOrder
     End Function
 End Class

 

排序执行时,使用下面的代码就可以进行升序排序。

[VB.NET]

'以升序排序 
DataGridView1.Sort(New CustomComparer(SortOrder.Ascending)) 

SortCompare事件的使用方法

这种方法也可以在DataGridView的DataSource属性没有设定,VirtualMode属性为False时使用。

SortCompare事件在DataGridView排序时对两个单元格的值比较时发生。这个事件是在DataGridViewColumn.SortMode属性为Automatic用户点击Header时、不使用IComparer触发DataGridView.Sort方法进行排序进行设定。

使用SortCompare事件处理器取得DataGridViewSortCompareEventArgs对象的CellValue1和CellValue2比较结果,如果CellValue1为大就是正整数,如果为CellValue2就是负整数,相等时SortResult属性被设定为0。而且Handled属性被设定为True。

下面的代码就是单元格的值变换为文字列时,根据长度排序的例子。

[VB.NET]

 'DataGridView1的SortCompare事件处理器
 Private 
Sub DataGridView1_SortCompare(ByVal sender As Object, _ 
        ByVal e As DataGridViewSortCompareEventArgs) _       
  Handles DataGridView1.SortCompare
     
'被指定单元格的值以文字列型取得
     Dim str1 As String
     If e.CellValue1 Is Nothing Then
         str1 = ""
Else
         str1 = e.CellValue1.ToString
     End If
     Dim str2 As String
     If e.CellValue2 Is Nothing Then
         str2 = ""
     Else
         str2 = e.CellValue2.ToString
     End If

      '引入结果
     e.SortResult = str1.Length - str2.Length
     '通知已经处理
     e.Handled = True
 End Sub

复数列排序时,可以使用DataGridViewSortCompareEventArgs对象的RowIndex1和とRowIndex2属性。从当前行的索引开始使用DataGridViewRow对象取得进行比较。

DataView.Sort属性的使用方法

在DataGridView的DataSource属性中设定DataSource时,可以使用DataView.Sort 属性BindingSource.Sort属性 进行排序。下面介绍一下DataView.Sort属性的使用方法。

比如说,想Column1列为升序排序,Sort属性设定为”Column1
ASC”即可。降序排序时,设定为”Column1 DESC”即可。Column1和Column2进行排序时,”Column1, Column2
ASC”(或者”Column1 ASC, Column2 ASC”)即可。

下面的代码是DataGridView1中的DataTable被Bind时,Column1和Column2以升序排序的例子。

[VB.NET]

 '取得在DataGridView1中被Bind的DataTable
 Dim dt As DataTable = CType(DataGridView1.DataSource, DataTable)
 'DataView取得
 Dim dv As DataView = dt.DefaultView
 'Column1和Column2以升序排序
 dv.Sort = "Column1, Column2 ASC"
 
 ' 
Column1和Column2以升序排序
 DataGridView1.Columns("Column1").HeaderCell.SortGlyphDirection = SortOrder.Ascending 
DataGridView1.Columns("Column2").HeaderCell.SortGlyphDirection =  SortOrder.Ascending

 

最新电影,电视剧,尽在午夜剧场

电影电视剧午夜不寂寞