Установка режимів сортування для стовпців елементу управління datagridview в windows forms

Сортування таких стовпців можна реалізувати програмним шляхом. Місце для гліфа сортування передбачається.

Для стовпця, який за замовчуванням має значення NotSortable. може знадобитися змінити режим сортування, якщо він містить значення, що допускають осмислену сортування. Наприклад, якщо в базі даних є стовпець з числами, що вказують на стан елементів, ці числа можна відображати у вигляді відповідних значків, прив'язавши до цього колонки бази даних стовпець з зображеннями. Далі можна перетворити числові значення осередків в графічні значення в обробнику події DataGridView. CellFormatting. У цьому випадку після присвоєння властивості SortMode значення Automatic користувачі отримають можливість проводити сортування стовпця. Автоматичне сортування дозволяє користувачам групувати елементи, які мають однакове стан, навіть якщо відповідні станам числа не утворюють натуральний ряд. Стовпці прапорців є ще один приклад доцільності використання автоматичного сортування для угруповання елементів з однаковим станом.

Програмна сортування DataGridView може здійснюватися за значеннями кожного з стовпців або відразу за кількома стовпцями незалежно від параметрів властивості SortMode. Програмна сортування може використовуватися, якщо необхідно надати власний користувальницький інтерфейс для сортування або реалізувати особливий механізм сортування. Створення власного користувальницького інтерфейсу сортування може виявитися необхідним, наприклад, при використанні в якості режиму виділення для елемента управління DataGridView виділення по заголовку стовпця. В цьому випадку, хоча заголовки стовпців і не можуть використовуватися для сортування, необхідно все ж, щоб в заголовках з'явився відповідний гліф сортування. Тому властивості SortMode необхідно присвоїти значення Programmatic.

Стовпці, для яких заданий програмний режим сортування, не відображують гліф сортування автоматично. Відображення гліфа для таких стовпців необхідно налаштувати самостійно шляхом завдання значення для властивості DataGridViewColumnHeaderCell.SortGlyphDirection. Це необхідно для досягнення гнучкості при використанні для користувача сортування. Наприклад, при сортуванні DataGridView за кількома стовпцями, може виникнути необхідність у відображенні декількох або жодного гліфа сортування.

Хоча програмна сортування DataGridView може проводитися по будь-якому стовпцю, деякі стовпці, наприклад стовпці кнопок, можуть не містити значень, які можуть бути осмислено впорядковані. Для подібних стовпців привласнення властивості SortMode значення NotSortable вказує на те, що вони не будуть використовуватися для сортування і, відповідно, місце для гліфа сортування резервувати не потрібно.

При сортуванні елемента управління DataGridView можна визначити як стовпець сортування, так і порядок сортування за значеннями властивостей SortedColumn і SortOrder. Ці значення не мають сенсу після проведення призначеного для користувача сортування. Додаткові відомості про користувальницької сортування см. В розділі "Призначена для користувача сортування" нижче.

При сортуванні елемента управління DataGridView. що містить як пов'язані, так і не пов'язані стовпці, автоматичне збереження значень в незв'язаних шпальтах неможливо. Для збереження цих значень слід застосувати віртуальний режим шляхом присвоєння властивості VirtualMode значення true і обробки подій CellValueNeeded і CellValuePushed. Додаткові відомості див. У розділі Практичний посібник. Реалізація віртуального режиму для елемента управління DataGridView в Windows Forms. Сортування по непов'язаним стовпцями в пов'язаному режимі не підтримується.

Сортування елемента управління DataGridView може проводитися програмним способом шляхом виклику методу Sort.

Перевантаження Sort (DataGridViewColumn, ListSortDirection) методу Sort приймає в якості параметрів значення перерахувань DataGridViewColumn і ListSortDirection. Ця перевантаження може використовуватися при сортуванні стовпців, що містять значення, які можуть бути осмислено впорядковані, але для яких небажано використовувати автоматичне сортування. При виклику цієї перевантаження і передачі стовпчика зі значенням DataGridViewColumnSortMode. Automatic властивості SortMode значення властивостей SortedColumn і SortOrder задаються автоматично, а в заголовку стовпця з'являється відповідний гліф сортування.

Якщо елемент керування DataGridView пов'язаний із зовнішнім джерелом даних шляхом завдання властивості DataSource. перевантаження методу Sort (DataGridViewColumn, ListSortDirection) не працює для незв'язаних стовпців. Крім того, якщо властивість VirtualMode має значення true. виклик цього перевантаження можливий тільки для пов'язаних стовпців. Визначити, чи є стовпець пов'язаним, можна виходячи з значення властивості IsDataBound. Сортування незв'язаних стовпців в пов'язаному режимі не підтримується.

Елемент управління DataGridView може налаштовуватися шляхом використання перевантаження Sort (IComparer) методу Sort або шляхом обробки події SortCompare.

Перевантаження методу Sort (IComparer) приймає як параметр екземпляр класу, який реалізує інтерфейс IComparer. Ця перевантаження може використовуватися, якщо необхідно забезпечити для користувача механізм сортування, наприклад, коли значення в стовпці не мають природного порядку сортування або ж природний порядок сортування непридатний. У цьому випадку використання автоматичного сортування неможливо, однак сортування шляхом клацання мишею по заголовкам стовпців може бути бажана. Якщо заголовки стовпців не використовуються для виділення, цю перевантаження можна викликати в обробнику події ColumnHeaderMouseClick.

Перевантаження методу Sort (IComparer) працює, тільки якщо елемент керування DataGridView не пов'язаний із зовнішнім джерелом даних, а властивість VirtualMode має значення false. Для настройки сортування для стовпців, пов'язаних із зовнішнім джерелом даних, слід скористатися операціями сортування, які підтримуються цим джерелом даних. У віртуальному режимі операції сортування для незв'язаних стовпців необхідно забезпечити самостійно.

Для використання перевантаження методу Sort (IComparer) необхідно створити власний клас, який реалізує інтерфейс IComparer. Відповідно до вимог цього інтерфейсу в класі повинен бути реалізований метод IComparer. Compare. якому DataGridView передає в якості вхідних даних об'єкти DataGridViewRow при виклику перевантаження методу Sort (IComparer). Завдяки цьому правильний порядок рядків може бути розрахований на підставі значень, що містяться в будь-якому з стовпців.

Перевантаження методу Sort (IComparer) не ставить значення властивостей SortedColumn і SortOrder. тому для відображення гліфа сортування необхідно задати значення властивості DataGridViewColumnHeaderCell.SortGlyphDirection.

В якості альтернативи перевантаження методу Sort (IComparer) призначену для користувача сортування можна реалізувати шляхом використання обробника події SortCompare. Ця подія настає при натисканні мишею по заголовкам стовпців, для яких налаштована автоматична сортування, або при виклику перевантаження Sort (DataGridViewColumn, ListSortDirection) методу Sort. Подія генерується для кожної пари рядків в елементі управління, що дає можливість визначити їх правильний порядок.

Подія SortCompare не виникає, якщо задано властивість DataSource або якщо властивість VirtualMode має значення true.

Схожі статті