You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何对DataGridView含正负值的列排序,实现0及以上正数在前负数在后

代码调整方案

排序逻辑

你需要的排序规则分为两个优先级:

  1. 第一优先级:所有0和正数排在负数前面
  2. 第二优先级:同符号区间内按数值升序排列
    如果需要调整负数区间的排序规则(比如按绝对值升序),可以自行修改同分组下的比较逻辑。

修改后的完整代码

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 14:57:01