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