Установка режимов сортировки для столбцов элемента управления DataGridView в Windows Forms
К столбцам DataGridView применимы три режима сортировки. Режим сортировки для каждого столбца определяется с помощью свойства SortMode столбца, которому можно присвоить одно из значений перечисления DataGridViewColumnSortMode.
Значение DataGridViewColumnSortMode |
Описание |
---|---|
Принимается по умолчанию для столбцов текстовых полей. Если заголовки столбцов не используются для выделения, щелчок мышью по заголовку столбца приводит к автоматической сортировке DataGridView по данному столбцу и выводу глифа с указанием порядка сортировки. |
|
Принимается по умолчанию для столбцов, содержащих не текстовые поля. Сортировку таких столбцов можно реализовать программным путем. Однако они не предназначены для сортировки, и место для глифа сортировки не предусматривается. |
|
Сортировку таких столбцов можно реализовать программным путем. Место для глифа сортировки предусматривается. |
Для столбца, который по умолчанию имеет значение 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.
См. также
Задачи
Ссылки
DataGridViewColumnHeaderCell.SortGlyphDirection
Основные понятия
Другие ресурсы
Сортировка данных в элементе управления DataGridView в Windows Forms