我对编码比较陌生,我希望有人可以帮我在datagridview中对一列负值和正值进行排序。它没有连接到数据表,因为我只读取文本文件中的值,它使用逗号分隔每个数据位并在datagridview中显示它。我试过使用这段代码:
DGV.Sort(DGV.Columns(2), System.ComponentModel.ListSortDirection.descending)
然而,它只根据值的第一个整数进行排序,并忽略负号,例如,如果该列下的单元格具有
3
-5
-2
它会排序,所以它将是
-5
3
-2
我如何排序以便考虑负号?
答案 0 :(得分:0)
目前,网格中的值是文本,而不是数字。因此,网格将它们排序为文本而不是数字。如果您希望网格自动将它们排序为数字,那么它们实际上必须是数字。
你似乎并不是说你想要标准的数字排序。你似乎在说你想要的是按绝对值排序。这意味着与您要求的完全相反,即您希望它忽略负号并仅按数字排序。无论文字或数字如何,这都不会自动发生。
在这种情况下,您必须处理网格的SortCompare
事件。在事件处理程序中,您可以将文本转换为数字,取绝对值并自行比较,例如
Dim num1 As Integer
Dim num2 As Integer
If Integer.TryParse(CStr(e.CellValue1), num1) AndAlso Integer.TryParse(CStr(e.CellValue2), num2) Then
'Order the numbers based on their absolute value.
e.SortResult = Math.Abs(num1).CompareTo(Math.Abs(num2))
Else
'At least one of the values is not a number so consider them equivalent for sorting purposes.
e.SortResult = 0
End If
e.Handled = True