Table of Contents

Сортировка данных

Функция сортировки данных позволяет сортировать одноуровневые узлы в 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)

Дефолтное поведение контролов заключается в сравнении значений редактирования ячеек при сортировке данных. Встроенные редакторы, встроенные в ячейки, могут форматировать редактируемые значения для представления их произвольным способом на экране. В некоторых случаях вы можете захотеть выполнить сортировку по тексту отображения ячейки вместо значений редактирования ячейки.

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

  • SortMode.Value — Алгоритм сортировки по умолчанию, который сравнивает значения редактирования ячеек.
  • SortMode.DisplayText — Алгоритм сортировки по умолчанию, который сравнивает текст, отображаемый в ячейках.
  • SortMode.Custom — Установите для свойства SortMode значение Custom, а затем обработайте события TreeListControl.CustomColumnSort и TreeViewControl.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;
}

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

Свойства

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

События

  • TreeListControlBase.StartSorting — срабатывает, когда данные собираются быть отсортированными.
  • TreeListControlBase.EndSorting — срабатывает, когда сортировка данных завершена.


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