Skip to content

Сортировка

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

Действия конечного пользователя

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

datagrid-sorting

Если данные отсортированы и требуется дополнительная сортировка по другому столбцу, щелкните заголовок этого столбца, удерживая нажатой клавишу SHIFT. Контрол будет сортировать данные по первому щелкнутому столбцу, затем по второму столбцу и так далее.

Чтобы отсортировать данные по определенному столбцу, пользователи также могут воспользоваться контекстным меню заголовка столбца. Меню содержит команды "Сортировать по возрастанию" и "Сортировать по убыванию". Если столбец отсортирован, в меню содержится команда "Очистить сортировку".

datagrid-sorting-contextmenu

Вы можете запретить сортировку определенных столбцов пользователями. Используйте для этой цели следующие свойства:

  • DataGridControl.AllowSorting — Указывает, может ли пользователь выполнять сортировку/группировку по любому столбцу.
  • ColumnBase.AllowSorting — Указывает, может ли пользователь сортировать и группировать определенный столбец.

Эти свойства не мешают вам сортировать данные в коде.

Сортировка в коде

Вы можете использовать следующие свойства, чтобы указать свойства сортировки для столбцов:

  • ColumnBase.SortDirection — задает порядок сортировки. Вы можете установить для этого свойства значение Ascending или Descending, чтобы отсортировать столбец. Когда вы инициализируете это свойство, столбец добавляется во внутреннюю коллекцию отсортированных столбцов Data Grid. Установите для свойства SortDirection значение null, чтобы очистить сортировку для этого столбца, и удалите столбец из коллекции отсортированных столбцов.

  • ColumnBase.SortIndex — Указывает индекс столбца, начинающийся с нуля, в коллекции отсортированных столбцов. Контрол Data Grid сортирует данные сначала по первому отсортированному столбцу, затем по второму отсортированному столбцу и так далее. Вы можете присвоить свойству SortIndex неотрицательное значение, чтобы отсортировать этот столбец в порядке возрастания. Установите для SortIndex значение -1, чтобы отменить сортировку по этому столбцу.

Вызовите унаследованный метод DataControlBase.ClearSorting контрола, чтобы удалить сортировку, примененную ко всем столбцам.

Следующий код очищает сортировку, а затем сортирует данные по двум столбцам:

dataGrid1.ClearSorting();
gridColumn1.SortDirection = ListSortDirection.Ascending;
gridColumn3.SortDirection = ListSortDirection.Descending;

Вы можете обернуть свой код методами BeginDataUpdate и EndDataUpdate, чтобы предотвратить ненужные обновления при изменении множества свойств контрола (включая свойства сортировки).

dataGrid1.BeginDataUpdate();
dataGrid1.ClearSorting();
gridColumn1.SortIndex = 0;
gridColumn3.SortIndex = 1;
gridColumn2.SortDirection = ListSortDirection.Descending;
dataGrid1.EndDataUpdate();

Настройка логики сортировки

Data Grid может сортировать (и группировать ) столбцы по редактируемым значениям, отображаемым значениям или в соответствии с пользовательским алгоритмом сортировки. Режим сортировки (и группирования) по умолчанию зависит от встроенного редактора столбцов и типа данных привязанного свойства:

  • Сортировка/группировка по значениям редактирования — все столбцы, кроме тех, у которых есть встроенный ComboBoxEditor.
  • Сортировка/группировка по тексту отображения — столбцам со встроенным ComboBoxEditor.
  • Нет сортировки/группировки — столбцы привязаны к объектам, которые не реализуют интерфейс IComparable. Например, типы данных картинок не реализуют этот интерфейс, поэтому сортировка по соответствующим столбцам недоступна по умолчанию. Смотрите раздел Пользовательская сортировка ниже для получения информации о том, как принудительно отсортировать эти столбцы.

Используйте свойство ColumnBase.SortMode, чтобы изменить режим сортировки/группировки для столбца. Доступны следующие опции:

  • SortMode.Value — Сортировка/группировка по значениям редактирования ячеек.
  • SortMode.DisplayText — Сортировка/группировка текста по ячейкам.
  • SortMode.Custom — Включает пользовательскую сортировку и группировку. Задайте свойству SortMode значение Custom, а затем обработайте событие DataGridControl.CustomColumnSort и/или DataGridControl.CustomColumnGroup для реализации пользовательской сортировки и/или пользовательской логики группировки. Дополнительную информацию смотрите по следующим ссылкам:

Пользовательская сортировка

Событие CustomColumnSort позволяет вам реализовать пользовательскую логику сортировки для определенного столбца. Установите для свойства ColumnBase.SortMode значение Custom, чтобы включить это событие.

Если связанный тип данных столбца не реализует интерфейс IComparable (например, тип данных картинка), Data Grid по умолчанию запрещает сортировку для этого столбца. Однако вы можете включить сортировку для этого столбца следующим образом:

  • Установите для свойства AllowSorting столбца значение true (значение этого свойства по умолчанию - null).
  • Установите для свойства SortMode столбца значение Custom.
  • Обработайте событие CustomColumnSort для реализации пользовательской сортировки.

Когда вы обрабатываете событие CustomColumnSort, вы должны сравнить две строки, указанные в аргументах события. Присвоьте результат сравнения параметру события Result следующим образом:

  • Установите для Result значение -1, если первая строка должна отображаться над второй строкой при сортировке данных в порядке возрастания.

  • Установите для Result значение 1, если первая строка должна отображаться ниже второй строки при сортировке данных в порядке возрастания.

  • Установите для Result значение 0, если две строки равны.

Следующий пример обрабатывает событие DataGridControl.CustomColumnSort для сортировки данных в столбце "FileName" произвольным способом. В столбце "FileName" хранятся имена файлов в стандартном формате "filename.ext". Пользовательская процедура сортировки сортирует имена файлов по их расширениям.

<mxdg:DataGridControl Name="dataGrid1" CustomColumnSort="DataGrid_CustomColumnSort">
    <mxdg:DataGridControl.Columns>
        <mxdg:GridColumn  Width="*" FieldName="FileName"  SortMode="Custom" />
    </mxdg:DataGridControl.Columns>
</mxdg:DataGridControl>

private void DataGrid_CustomColumnSort(object? sender, DataGridCustomColumnSortEventArgs e)
{
    if (e.Column.FieldName == "FileName")
    {
        string fileName1 = Convert.ToString(e.Value1);
        string fileName2 = Convert.ToString(e.Value2);

        string newfileName1 = extractFileExtension(fileName1) + "." + fileName1;
        string newfileName2 = extractFileExtension(fileName2) + "." + fileName2;
        e.Result = String.Compare(newfileName1, newfileName2);
    }
}

string extractFileExtension(string fileName)
{
    string res = "";
    int dotIndex = fileName.LastIndexOf('.');
    if (dotIndex > 0)
        res = fileName.Substring(dotIndex + 1);
    return res;
}

Ответ на сортировку данных

Обработайте следующие события для выполнения пользовательских действий при сортировке данных:

  • DataControlBase.StartSorting — срабатывает, когда данные собираются для сортировки.
  • DataControlBase.EndSorting — Срабатывает по завершении сортировки данных.



* Эта страница была создана автоматически с помощью сервиса машинного перевода Яндекс Переводчик.