В моем приложении на C # .NET у меня есть DataGridView.DataSource сетки - это BindingSource, а BindSource связан с отфильтрованным DataView таблицы DataTable, которая часто запрашивается из SQL.
Я уже могу сортировать столбцы в сетке, но сортировка всегда выполняется в алфавитном порядке на строковой версии любого значения данных, отображаемого в ячейках.У меня есть несколько полей, которые отображают имя, но их нужно упорядочить по определенному значению, а не по алфавиту.У меня также есть поле, которое может быть числом или словом «Неизвестно».Мне нужно иметь возможность настроить логику сортировки.
Я знаю, что не могу использовать событие SortCompare сетки, потому что я использую связанный DataSource.Я попытался создать столбцы, которые отображают пользовательский класс, производный от IComparable, но сортировка по этому столбцу по-прежнему всегда сортируется по алфавиту вместо использования моего метода Compare ().
Я нашел одно возможное решение, которое включает в себя сохранение скрытого DataGridViewColumn, в котором хранится число для сортировки, и использование события ColumnHeaderMouseClick сетки, чтобы заставить его сортировать по этому скрытому столбцу «сортировать», когда пользователь нажимает на «дисплей "столбец.Однако «символ сортировки» заголовка столбца (маленькая иконка со стрелкой вверх / вниз, отображаемая в отсортированном столбце) не поднимется, потому что фактически отсортированный столбец скрыт.Я попытался вручную установить свойство столбца HeaderCell.SortedGlyphDirection, но значок всегда будет скрыт, если сортировка BindingSource не для этого столбца.
Я почти уверен, что смогу заставить это работать, если вместоDataView DataTable, я использовал сортируемый список пользовательских объектов-оболочек, которые я создаю для каждой строки данных, но я не хочу прибегать к этому, если это возможно.Но если это мой единственный вариант, я так и сделаю.