Skip to content

Сортировка

Функция сортировки данных позволяет сортировать одноуровневые узлы в TreeList и контролах TreeView в порядке возрастания или убывания.

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

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

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

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

Пользователь также может изменить свойства сортировки столбца из контекстного меню заголовка столбца. Щелкните правой кнопкой мыши заголовок столбца, чтобы вызвать это меню.

Используйте следующие свойства, чтобы запретить пользователю сортировать данные:

  • Установите для TreeListControl.AllowSorting значение false, чтобы запретить пользователю выполнять сортировку по любому столбцу.
  • Установите для ColumnBase.AllowSorting значение false, чтобы запретить пользователю выполнять сортировку по определенному столбцу.

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

Контрол TreeView не имеет функций для сортировки данных из пользовательского интерфейса. Вы можете сортировать данные в коде в этом контроле.

Сортировка по коду (TreeList)

Вы можете отсортировать данные TreeList по одному или нескольким столбцам. Когда вы сортируете данные по нескольким столбцам, контрол TreeList переупорядочивает узлы в соответствии со значениями первого столбца сортировки. Затем он переупорядочивает отсортированные узлы по второму столбцу сортировки, сохраняя порядок значений в первом столбце, и так далее.

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

  • Установите для свойства ColumnBase.SortDirection значение Ascending или Descending. Это свойство определяет порядок сортировки данных в столбце.

  • Установите для свойства ColumnBase.SortIndex неотрицательное значение, чтобы отсортировать данные по столбцу в порядке возрастания. Свойство ColumnBase.SortIndex определяет позицию столбца среди отсортированных столбцов.

Выполните одно из следующих действий, чтобы очистить сортировку:

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

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

using CommunityToolkit.Mvvm.ComponentModel;
using System.ComponentModel;

treeList.ClearSorting();
treeListColumn1.SortDirection = ListSortDirection.Ascending;
treeListColumn3.SortDirection = ListSortDirection.Descending;

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

using CommunityToolkit.Mvvm.ComponentModel;
using System.ComponentModel;

treeList.BeginDataUpdate();
treeList.ClearSorting();
treeListColumn1.SortIndex = 0;
treeListColumn3.SortIndex = 1;
treeListColumn2.SortDirection = ListSortDirection.Descending;
treeList.EndDataUpdate();

Сортировка по коду (TreeView)

Чтобы отсортировать данные в TreeView, используйте свойство SortDirection вашего объекта TreeViewControl. Установите для этого свойства значение Ascending или Descending, чтобы отсортировать данные в требуемом порядке.

treeViewControl1.SortDirection = ListSortDirection.Ascending;

Выполните одно из следующих действий, чтобы очистить сортировку:

  • Установите для свойства SortDirection значение null.
  • Вызовите унаследованный метод DataControlBase.ClearSorting контрола.

Сортируемые столбцы и режим сортировки (TreeList и TreeView)

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

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

Свойство ColumnBase.SortMode (в TreeList) и свойство TreeViewControl.SortMode (в TreeView) позволяют изменять режим сортировки по умолчанию. Доступны следующие опции:

  • SortMode.Value — Сортировка по значениям редактирования ячеек.
  • SortMode.DisplayText — Сортировка текста по ячейкам.
  • SortMode.Custom — Пользовательская сортировка. Установите для свойства SortMode значение Custom, а затем обработайте событие TreeListControl.CustomColumnSort/TreeViewControl.CustomSort, чтобы реализовать пользовательскую процедуру сортировки. Смотрите раздел Пользовательская сортировка .

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

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

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

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

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

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

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

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

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

<mxtl:TreeListControl Name="treeList" CustomColumnSort="TreeList_CustomColumnSort">
    <mxtl:TreeListControl.Columns>
        <mxtl:TreeListColumn  Width="*" FieldName="FileName"  SortMode="Custom" />
    </mxtl:TreeListControl.Columns>
</mxtl:TreeListControl>

private void TreeList_CustomColumnSort(object? sender, TreeListCustomColumnSortEventArgs 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 — Срабатывает по завершении сортировки данных.

Дополнительный API

  • TreeListControlBase.AutoScrollOnSorting — Указывает, будет ли контрол автоматически прокручивать порт просмотра, чтобы сделать сфокусированный узел видимым при сортировке данных.



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