Сортировка данных
Функция сортировки данных позволяет сортировать одноуровневые узлы в 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
— срабатывает, когда сортировка данных завершена.
* Эта страница была создана автоматически с помощью сервиса машинного перевода Яндекс Переводчик.