2015-02-16 3 views
0

Я относительно новичок в кодировании, и я надеялся, что кто-то может помочь мне с сортировкой столбца отрицательных и положительных значений в datagridview. Он не связан с данными, поскольку я читаю только значения из текстового файла, который использует запятые для разделения каждого бита данных и отображения его в datagridview. Я пытался использовать этот код:Как отсортировать отрицательные и положительные значения из datagridview в vb.net?

DGV.Sort(DGV.Columns(2), System.ComponentModel.ListSortDirection.descending) 

Однако это только сортирует в соответствии с первым целого значения, и игнорирует отрицательный знак, так, например, если клетки под этой колонки имели

3 
-5 
-2 

было бы сортировать так было бы

-5 
3 
-2 

Как я вроде так он принимает отрицательный знак во внимание?

+1

Какой тип столбца используется для этой колонки? – Plutonix

+0

Я не уверен, что это то, о чем вы говорите: DataGridViewTextBoxColumn – NicolaR

+0

Почему в вашем желаемом порядке сортировки есть -2-й _ _fter_ 3? –

ответ

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 
Смежные вопросы