Нестандартная сортировка в DataGridView

Задача: изменить порядок сортировки значений в DataGridView по одному столбцу. Чаще всего стандартную сортировку приходится переделывать в случае наличия столбца со смешанными, текстово-числовыми данными или, проще говоря, строками, внутри которых содержатся числа вперемешку с текстом. Стандартная сортировка обрабатывает их как строки, сортируя по алфавиту - а нам нужно чтобы "значение 6" шло раньше "значения 10" или "значение-3-12" шло раньше "значение-1-11".

При выборке данных с сервера чаще всего создается отдельный столбец с нужным числовым значение и сортировка производится по нему.

Но в данному случае нам надо применить собственную сортировку только при клике по одной из колонок DataGridView, не перегружая данные и по минимуму изменяя остальной код. Самый простой способ:

1) Выключить стандартную сортировку для конкретной колонки через свойство DataGridViewColumn.SortMode

2) Добавить в служащую источником данных DataTable нужные для правильной сортировки колонки

3) Перехватить событие DataGridView.ColumnHeaderMouseClick и при клике по заголовку нужного столбца (определенного по свойству DataGridViewCellMouseEventArgs.ColumnIndex) вручную прописать свойство DataView.Sort нашего источника данных.


Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *


*

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>