Задача: изменить порядок сортировки значений в DataGridView по одному столбцу. Чаще всего стандартную сортировку приходится переделывать в случае наличия столбца со смешанными, текстово-числовыми данными или, проще говоря, строками, внутри которых содержатся числа вперемешку с текстом. Стандартная сортировка обрабатывает их как строки, сортируя по алфавиту - а нам нужно чтобы "значение 6" шло раньше "значения 10" или "значение-3-12" шло раньше "значение-1-11".
При выборке данных с сервера чаще всего создается отдельный столбец с нужным числовым значение и сортировка производится по нему.
Но в данному случае нам надо применить собственную сортировку только при клике по одной из колонок DataGridView, не перегружая данные и по минимуму изменяя остальной код. Самый простой способ:
1) Выключить стандартную сортировку для конкретной колонки через свойство DataGridViewColumn.SortMode
2) Добавить в служащую источником данных DataTable нужные для правильной сортировки колонки
3) Перехватить событие DataGridView.ColumnHeaderMouseClick и при клике по заголовку нужного столбца (определенного по свойству DataGridViewCellMouseEventArgs.ColumnIndex) вручную прописать свойство DataView.Sort нашего источника данных.