Winform DatagridView числовая сортировка столбца

Я использую просто простой DataGridView для содержания набора данных (Забавный это).

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

Запуск порядка мог бы быть:

  • 0.56
  • 3.45
  • 500.89
  • 20078.90
  • 1.56
  • 100.29
  • 2.39

Конечный порядок был бы:

  • 0.56
  • 100.29
  • 1.56
  • 20078.90
  • 2.39
  • 3.45
  • 500.89

Как Вы видите, это заказывает его начинающий с первого числа. И затем заказы это таким образом.

Я думал возможно, что я мог установить столбец на другой "ColumnType", и это может автоматически сделать это. Но нет никаких "Числовых" или "Десятичных" типов столбца.

Я был на MSDN, ищущем проблему, и я мог найти метод "вида", который я могу использовать на DataGridView. Но объяснение было немногим выше моей головы, и примеры не использовали числа, только текст, таким образом, я не мог видеть, как я, как предполагалось, переключил вещи.

Любая справка очень ценилась бы.

8
задан Iain Holder 9 April 2010 в 18:33
поделиться

2 ответа

Это можно решить, добавив обработчик события SortCompare на DataGridView со следующим кодом:

private void dataGridView1_SortCompare(object sender, DataGridViewSortCompareEventArgs e)
{
    if (e.Column.Index == 0)
    {
        if (double.Parse(e.CellValue1.ToString()) > double.Parse(e.CellValue2.ToString()))
        {
            e.SortResult = 1;
        }
        else if (double.Parse(e.CellValue1.ToString()) < double.Parse(e.CellValue2.ToString()))
        {
            e.SortResult = -1;
        }             
        else
        {
            e.SortResult = 0;
        }
        e.Handled = true;
   }
}

Из MSDN есть такое описание значений SortResult:

Менее нуля, если первая ячейка будет сортировать перед второй ячейкой; ноль если в первой и второй камере эквивалентные значения; больше нуля если вторая клетка будет отсортирована перед первой ячейкой.

Обратите внимание, что на моей тестовой площадке единственным числовым столбцом был первый (с индексом 0), поэтому у меня есть проверка на индекс столбца.

Также, в зависимости от ваших потребностей и данных, вы можете захотеть доработать мой код - например, мой код выбросит исключение, если по каким-то причинам у вас в столбце есть не числовые данные.

Вы, вероятно, видели это, но здесь - это ссылка на страницу MSDN по настройке сортировки DataGridView. Как вы говорите, они имеют дело только с текстом.

8
ответ дан 5 December 2019 в 10:41
поделиться

Она сортирует ее по символам. Вам нужно сделать тип столбца плавающим, чтобы он знал, какой оператор сравнения применить.

(То есть вам нужно сделать тип столбца в вашем наборе данных плавающим, думаю, это сработает)

.
0
ответ дан 5 December 2019 в 10:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: