如何对DataGridView含正负值的列排序,实现0及以上正数在前负数在后
代码调整方案
排序逻辑
你需要的排序规则分为两个优先级:
- 第一优先级:所有0和正数排在负数前面
- 第二优先级:同符号区间内按数值升序排列
如果需要调整负数区间的排序规则(比如按绝对值升序),可以自行修改同分组下的比较逻辑。
修改后的完整代码
Private Sub DataGridViewRez_SortCompare(sender As Object, e As DataGridViewSortCompareEventArgs) Handles DataGridViewRez.SortCompare Dim num1 As Integer Dim num2 As Integer If e.Column.Index = 3 Then If Integer.TryParse(CStr(e.CellValue1), num1) AndAlso Integer.TryParse(CStr(e.CellValue2), num2) Then ' 分组:非负数归为0组,负数归为1组,保证非负数排在前面 Dim group1 As Integer = If(num1 >= 0, 0, 1) Dim group2 As Integer = If(num2 >= 0, 0, 1) If group1 <> group2 Then ' 不同组直接按组号排序 e.SortResult = group1.CompareTo(group2) Else ' 同组按数值升序排序,若需要负数按绝对值升序,此处可改为Math.Abs(num1).CompareTo(Math.Abs(num2)) e.SortResult = num1.CompareTo(num2) End If Else ' 非数值内容按同等优先级处理 e.SortResult = 0 End If e.Handled = True End If End Sub
调整说明
- 新增了分组逻辑:将所有>=0的数分到0组,负数分到1组,优先按组号排序,天然实现非负数排在负数前面的需求
- 同组内默认按原始数值升序,如果你需要负数区间按绝对值从小到大排,只需要把同组比较的代码替换为按绝对值比较即可
内容的提问来源于stack exchange,提问作者Lider13
相关产品推荐
相关产品推荐

