我有一个datagridview数据绑定字符串列,其中包含字符串编号0-99和空白,没有。
我希望用数字0到99对这个列进行排序,并且在开头或结尾都有空白的单元格。
我使用DataGridView_ColumnHeaderMouseClick事件并检查列索引以获取正确的索引,然后使用IComparer进行排序。
Class Colomn5Comparer : Implements IComparer
Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer Implements System.Collections.IComparer.Compare
Dim XX As DataGridViewRow = DirectCast(x, DataGridViewRow)
Dim YY As DataGridViewRow = DirectCast(y, DataGridViewRow)
If Not XX.Cells(5).Value = "" AndAlso Not YY.Cells(5).Value = "" Then
If CInt(XX.Cells(5).Value) < CInt(YY.Cells(5).Value) Then
If m_SortOrder = "Desc" Then
Return 1
Else
Return -1
End If
ElseIf CInt(XX.Cells(5).Value) > CInt(YY.Cells(5).Value) Then
If m_SortOrder = "Desc" Then
Return -1
Else
Return 1
End If
Else
Return 0
End If
Else
Return 0
End If
End Function
End Class
我不得不排除没有空白值的单元格,以防止误差大于或小于整数
If Not XX.Cells(5).Value = "" AndAlso Not YY.Cells(5).Value = "" Then
这当然会在排序后在当前行位置留下空白的单元格。
有没有办法可以在排序中以某种方式包含空白单元格,以便它们出现在排序行的底部或顶部?
答案 0 :(得分:0)
刚刚找到答案,如果我退回-1,当排除空白值时,他们会排序到开头。
答案 1 :(得分:0)
这方面的一些变化会给你更多
If XX.Cells(5).Value = "" AndAlso YY.Cells(5).Value = "" Then return 0;
If XX.Cells(5).Value = "" Then return -1;
If YY.Cells(5).Value = "" Then return +1;