7774tlas Ответов: 4

Как отсортировать столбец DataGridView численно?


У меня есть приложение с несвязанным DataGridView, и содержимое первого столбца-это значения миллисекунд. Проблема в том, что он сортирует их как строки, а не целые числа.
Пример:

21045
2305
340980
3700

когда он должен сортироваться как:

2305
3700
21045
340980

Мне нужно, чтобы он сортировал строки по значению первого столбца[МС] от наименьшего(сверху) до наибольшего(снизу).

Может кто-нибудь помочь?

4 Ответов

Рейтинг:
21

Richard.Berry100

Я не хочу отвлекаться от решения VJ Reddy, но если DataGridview не привязан к источнику данных, и вы добавляете данные программно, вы можете попробовать записать целочисленный тип данных (или другой числовой тип данных) в ячейки DataGridview. Тогда он также сортирует правильно.


7774tlas

Извините за поздний ответ. Да, DataGridView не привязан, и я добавляю данные программно, поэтому я верю, что ваше решение будет работать. Проблема в том, что я новичок и понятия не имею, как задать тип данных для ячеек в первом столбце.

Richard.Berry100

Допустим, вы получаете данные для размещения в ячейке из текстового поля txtPrice.

Dim Price as Integer = Cint(Me.txtPrice.Text) 'преобразует значение в текстовом поле в целое число

Me.Datagridveiw1.Rows(1).Ячейки("Цена").Value = Price 'поместите его в сетку данных

В принципе, вы можете использовать одну из многих скрытых функций, прежде чем поместить значение в datagrid (Cint, CDbl, CBool, CStr)

Вы даже можете написать это так:

Me.Datagridveiw1.Rows(1).Ячейки("Цена").Value = CInt(Me.txtPrice.Текст)

Рейтинг:
2

VJ Reddy

Один из вариантов заключается в использовании SortCompare случае DataGridView как показано ниже

Private Sub dataGridView1_SortCompare(sender As Object, e As DataGridViewSortCompareEventArgs)
    If e.Column.Index <> 0 Then
        Return
    End If
    Try
        e.SortResult = If(CInt(e.CellValue1) < CInt(e.CellValue2), -1, 1)
        e.Handled = True
    Catch
    End Try
End Sub


7774tlas

Извините за поздний ответ. Пожалуйста, простите мое невежество, но большая часть этого все еще греческая для меня. Я не знаю, как это реализовать. Мое приложение воспроизводит аудиофайл, и при нажатии кнопки "Установить" оно добавляет текущую позицию файла в миллисекундах вместе с другой разной информацией в DataGridView программно. Мне нужно, чтобы список сортировки обновлялся каждый раз, когда нажимается кнопка "Установить" и вводится новая строка данных. Я не понимаю, как и когда я должен активировать частный Sub SortCompare. Я понимаю, что он сравнивает данные в ячейках, а затем сортирует их, но что вызывает событие SortCompare?

Рейтинг:
2

silangitnet

если DataGridview привязан к источнику данных, во время добавления столбца убедитесь, что он включает тип данных:

объект DataTable.Столбцы.Add("Quantity", GetType(Integer))


Member 3126828

excelente respuesta, большое спасибо

Рейтинг:
2

Member 2964021

Решение 4
Я просто изменил список, чтобы добавить числовой элемент, который использовался для заполнения сетки. Затем я смог отсортировать его как числовое поле.

accountList.Add(new AccountList
                    {
                        BankAvailableBalance = (decimal)row["BankAvailableBalance"],
                        BankCurrentBalance = (decimal)row["BankCurrentBalance"]
                    });


На DataGrid у меня есть следующее

<DataGrid Name="DataGridAccount" AutoGenerateColumns="False"
                  Grid.Column="0" Grid.Row="1" Grid.ColumnSpan="3">
   <DataGrid.Columns>
                <DataGridTextColumn Header="Bank Available Balance" Binding="{Binding BankAvailableBalance}"/>
                <DataGridTextColumn Header="Bank Current Balance" Binding="{Binding BankCurrentBalance}"/>

     </DataGrid.Columns>
</DataGrid>


CHill60

Если вы внимательно прочтете вопрос, то увидите, что ОП написал: "у меня есть приложение с несвязанный элемент". Вы продемонстрировали решение, используя связанную сетку данных.