Я использую просто простой DataGridView для содержания набора данных (Забавный это).
У меня есть десятичные числа в конкретном столбце. Но когда дело доходит до упорядочивания тем десятичным столбцом, это заказывает его неправильно. Например:
Запуск порядка мог бы быть:
Конечный порядок был бы:
Как Вы видите, это заказывает его начинающий с первого числа. И затем заказы это таким образом.
Я думал возможно, что я мог установить столбец на другой "ColumnType", и это может автоматически сделать это. Но нет никаких "Числовых" или "Десятичных" типов столбца.
Я был на MSDN, ищущем проблему, и я мог найти метод "вида", который я могу использовать на DataGridView. Но объяснение было немногим выше моей головы, и примеры не использовали числа, только текст, таким образом, я не мог видеть, как я, как предполагалось, переключил вещи.
Любая справка очень ценилась бы.
Это можно решить, добавив обработчик события 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. Как вы говорите, они имеют дело только с текстом.
Она сортирует ее по символам. Вам нужно сделать тип столбца плавающим, чтобы он знал, какой оператор сравнения применить.
(То есть вам нужно сделать тип столбца в вашем наборе данных плавающим, думаю, это сработает)
.