Фильтрация и поиск¶
Контролы TreeList и TreeView поддерживают функции фильтрации и поиска данных, которые позволяют находить узлы на основе их значений.
Фильтры столбцов (TreeList)¶
Начиная с версии 1.2, пользователи могут фильтровать столбцы TreeList с помощью меню фильтров. Когда пользователь наводит указатель мыши на заголовок столбца, появляется кнопка фильтра. Эта кнопка активирует меню фильтра, содержащее все уникальные значения столбца. Пользователь может выбрать любое значение в меню фильтра для фильтрации столбца.

- Пользователи могут фильтровать TreeList по нескольким столбцам. В этом случае фильтры, примененные к отдельным столбцам, объединяются оператором AND.
- В настоящее время меню фильтров не поддерживают множественный выбор значений, но эта функция находится в разработке.
После применения фильтра в нижней части появляется панель фильтров. На ней отображаются текущие примененные критерии фильтрации и предоставляется возможность временно отключить и очистить фильтр.

Чтобы узнать, как фильтровать программно, см. следующий раздел:
Связанный API¶
Члены контрола TreeList
- FilterString— Получает или задает критерии фильтрации, примененные к контролу. Вы можете использовать это свойство для создания фильтра в коде. Свойство- FilterStringподдерживается контролами TreeList и TreeView.
- IsFilterEnabled— Получает или задает, активен ли фильтр. Свойство- IsFilterEnabledподдерживается контролами TreeList и TreeView.
- AllowColumnFiltering— Получает или задает, разрешены ли кнопки фильтров для всех столбцов. Вы можете использовать свойство- ColumnBase.AllowColumnFilteringстолбца, чтобы переопределить глобальную настройку для отдельных столбцов. Например, чтобы отключить кнопки фильтров для всех столбцов, кроме одного, установите свойство- TreeListControl.AllowColumnFilteringв- false, а свойство- ColumnBase.AllowColumnFilteringцелевого столбца — в- true.
- ColumnFilterButtonDisplayMode— Получает или задает, всегда ли видны кнопки фильтров или они появляются только при наведении пользователем указателя мыши на заголовок столбца (по умолчанию).
- FilterPanelText— Получает текстовое представление фильтра, отображаемое на панели фильтров.
- IsFilterPanelVisible— Получает, видима ли в данный момент панель фильтров.
- FilterPanelDisplayMode— Получает или задает режим видимости панели фильтров. Доступные варианты включают:- Auto(по умолчанию) — Панель фильтров появляется при применении фильтра к любому столбцу.
- Never— Панель фильтров всегда скрыта.
 
- CustomColumnDisplayTextevent — Позволяет предоставить пользовательский отображаемый текст для значений столбцов, включая те, что отображаются на панели фильтров. Когда событие- CustomColumnDisplayTextвозникает для значений столбцов на панели фильтров, параметр- SourceItemIndexсобытия возвращает- -1.
Члены столбцов
- ColumnBase.AllowColumnFiltering— Получает или задает, разрешена ли кнопка фильтра для текущего столбца. Чтобы включить или отключить кнопки фильтров для всех столбцов, см. настройку- TreeListControl.AllowColumnFiltering. Опция- ColumnBase.AllowColumnFilteringпозволяет переопределить настройку- TreeListControl.AllowColumnFilteringдля отдельных столбцов.
- ColumnBase.ColumnFilterMode— Получает или задает способ фильтрации данных столбца. Доступные варианты:- Value— Данные столбца фильтруются по базовым значениям.
- DisplayText— Данные столбца фильтруются по отображаемому тексту ячеек.
 
- ColumnBase.IsFiltered— Получает, применен ли фильтр к текущему столбцу.
- ColumnBase.RoundDateTimeForColumnFilter— Получает или задает, игнорировать ли временную часть значений DateTime при построении фильтров для столбцов, отображающих значения DateTime. Это свойство действует для фильтров, созданных с использованием меню фильтров столбцов и строки автофильтра.
Панель поиска (TreeList и TreeView)¶
Панель поиска отображается в верхней части контрола TreeList/TreeView. Она предоставляет текстовое поле, в которое пользователь может ввести текст для поиска. Контролы автоматически фильтруют узлы, отображая те, которые содержат указанный текст.

- Поиск данных нечувствителен к регистру.
- Для поиска указанного текста в узлах используется оператор сравнения Contains.
- Контрол TreeList ищет указанный текст во всех своих столбцах.
Установите свойство SearchPanelDisplayMode контрола (унаследованное от класса DataControlBase) в одно из следующих значений, чтобы включить панель поиска:
- SearchPanelDisplayMode.Always— Контрол постоянно отображает панель поиска.
- SearchPanelDisplayMode.HotKey— Контрол отображает панель поиска, когда пользователь нажимает горячую клавишу CTRL+F. Сочетание ESC очищает панель поиска. Последующее нажатие клавиши ESC закрывает панель. Пользователь также может активировать панель поиска из контекстного меню заголовка столбца.
Свойство TreeListControlBase.FilterMode определяет, какие узлы отображаются при обнаружении совпадений. Поддерживаются три режима фильтрации:
- FilterMode.ShowMatches— Отображает узлы, соответствующие тексту поиска.
- FilterMode.ShowMatchesWithAncestors— Отображает узлы, соответствующие тексту поиска, и их родительские узлы.
- FilterMode.ShowBranchesWithMatches— Отображает целые ветви, если они содержат узлы, соответствующие критериям фильтра.
Поиск в свернутых узлах¶
Во время поиска/фильтрации данных контролы TreeList/TreeView могут выполнять поиск внутри свернутых узлов. Установите опцию TreeListControlBase.ExpandNodesOnFiltering в true, чтобы выполнять поиск в свернутых узлах и автоматически разворачивать их при обнаружении совпадения.
Контролы выполняют поиск только по текущим загруженным узлам. Для иерархических источников данных вы можете установить свойство AllowDynamicDataLoading в false, чтобы отключить динамическую загрузку узлов и загрузить все узлы сразу.
Связанный API¶
- DataControlBase.IsSearchPanelVisible— Получает, видима ли в данный момент панель поиска.
- DataControlBase.SearchPanelHighlightResults— Указывает, следует ли подсвечивать искомый текст в найденных узлах. Значение свойства по умолчанию —- true.
- DataControlBase.SearchText— Получает или задает текст для поиска. Вы можете присвоить значение этому свойству, чтобы отфильтровать контрол в коде. Эта функциональность фильтрации поддерживается, даже если панель поиска скрыта или отключена (свойство- SearchPanelDisplayModeустановлено в- SearchPanelDisplayMode.Never).
- DataControlBase.ShowSearchPanelCloseButton— Позволяет скрыть встроенную кнопку закрытия на панели поиска.
- TreeListControlBase.ExpandNodesOnFiltering— Указывает, следует ли разворачивать свернутые узлы во время поиска/фильтрации данных, когда их дочерние узлы соответствуют текущим критериям фильтра/поиска.
Пример¶
Следующий код делает панель поиска всегда видимой и включает отображение отфильтрованных узлов вместе с их родителями. Свойство SearchText используется для установки текста поиска.
treeList.SearchPanelDisplayMode = SearchPanelDisplayMode.Always;
treeList.FilterMode = FilterMode.ShowMatchesWithAncestors;
treeList.SearchText = "department";
Строка автофильтра (TreeList)¶
Строка автофильтра — это специальная строка, отображаемая над всеми узлами TreeList. Она позволяет пользователю вводить текст в ее ячейки для фильтрации данных по соответствующим столбцам.

- Функция фильтрации нечувствительна к регистру.
- Для поиска в свернутых узлах и их разворачивания при обнаружении совпадения установите опцию TreeListControlBase.ExpandNodesOnFilteringвtrue. См. также: Поиск в свернутых узлах
Установите свойство TreeList.ShowAutoFilterRow в true, чтобы включить строку автофильтра.
Вы можете использовать свойство ColumnBase.AutoFilterCondition, чтобы указать операцию сравнения данных для конкретных ячеек (столбцов) строки автофильтра. Когда пользователь вводит текст, TreeList использует указанную операцию сравнения для сравнения значений столбцов при поиске целевых узлов. Поддерживаются следующие операции сравнения данных:
- Contains— Значения узлов в целевом столбце должны содержать введенное значение. Этот режим подходит для строковых значений.
- Default— Опция- Defaultэквивалентна опции- Containsдля строковых типов данных и Object. Эта опция эквивалентна- Equalsдля других типов данных.
- Equals— Значения узлов в целевом столбце должны совпадать с введенным значением.
- StartsWith— Значения узлов в целевом столбце должны начинаться с введенного значения. Этот режим подходит для строковых значений.
Свойство ColumnBase.AutoFilterValue позволяет задать значение для конкретной ячейки строки автофильтра в коде. Вы можете использовать ColumnBase.AutoFilterValue для фильтрации TreeList, даже если строка автофильтра скрыта.
Режим фильтрации контрола по умолчанию — отображать только узлы, соответствующие указанным критериям. Установите свойство TreeListControlBase.FilterMode в FilterMode.ShowMatchesWithAncestors, чтобы отображать целевые узлы вместе с их родителями.
Пример¶
Следующий код активирует строку автофильтра и отображает узлы, значения в столбце 'Name' которых начинаются с "M".
treeList1.ShowAutoFilterRow = true;
TreeListColumn colName = treeList1.Columns["Name"];
colName.AutoFilterCondition = AutoFilterCondition.StartsWith;
colName.AutoFilterValue = "M";
Динамическая фильтрация узлов с использованием события¶
Событие CustomNodeFilter позволяет скрывать определенные узлы на основе пользовательского условия. Это событие возникает для каждого узла в следующих случаях:
- Источник элементов контрола изменяется.
- Узлы контрола фильтруются (например, с использованием панели поиска и/или строки автофильтра).
- Вызывается метод RefreshDataконтрола.
Используйте параметр события Node для идентификации текущего обрабатываемого узла. Чтобы скрыть узел, установите параметр события Visible в false.
Пример - Фильтрация строк с помощью события¶
В следующем примере контрол Tree List отображает список объектов ProjectTask. Событие CustomNodeFilter обрабатывается для реализации пользовательской фильтрации узлов. Узлы скрываются в соответствии со значением свойства ProjectTask.Status.
Предполагается, что в примере есть кнопка-переключатель "Enable Filter", которая активирует и деактивирует пользовательскую фильтрацию. При нажатии на кнопку обработчик события ToggleButton.IsCheckedChanged вызывает метод RefreshData для обновления узлов списка и повторного вызова события CustomNodeFilter.
<ToggleButton Name="btnEnableFilter" Content="Enable Filter" IsCheckedChanged="BtnEnableFilter_IsCheckedChanged"/>
<mxtl:TreeListControl x:Name="treeList" CustomNodeFilter="TreeList_CustomNodeFilter">
<!-- ... -->
using Eremex.AvaloniaUI.Controls.TreeList;
private void BtnEnableFilter_IsCheckedChanged(object sender, RoutedEventArgs e)
{
    treeList.RefreshData();
}
private void TreeList_CustomNodeFilter(object sender, TreeListCustomNodeFilterEventArgs e)
{
    bool filterEnabled = btnEnableFilter.IsChecked == true;
    if (!filterEnabled)
        return;
    ProjectTask task = e.Node.Content as ProjectTask;
    e.Visible = task.Status!= DemoData.TaskStatus.Completed;
}
Фильтрация в коде (TreeList и TreeView)¶
Начиная с версии 1.2, вы можете использовать свойство DataControlBase.FilterString для программной фильтрации данных в контролах TreeList и TreeView.
 
Строка фильтра состоит из отдельных выражений фильтра, объединенных логическими операторами (AND или OR).
Очистка и отключение фильтра¶
- Чтобы очистить фильтр, установите свойство FilterStringвnullили пустую строку.
- Чтобы временно отключить фильтр, используйте свойство DataControlBase.IsFilterEnabled.
Указание столбцов¶
В строке фильтра на столбцы следует ссылаться по их именам полей, заключенным в квадратные скобки. Примеры:
- [FirstName]
- [Position]
Указание констант¶
- Числовые константы должны указываться с использованием стандартных числовых форматов. Примеры:- 500,- 0
- 10.314,- .5
- 12.0m/- 12.0M,- 12d/- 12D,- 12f/- 12F
- -32.5
 
- Строковые константы должны быть заключены в одинарные кавычки ('). Чтобы вставить'как литерал, используйте нотацию''. Примеры:- 'Research and Development'
- 'Clair de lune'
- 'O''Neil'
 
- Константы DateTime и DateTimeOffset должны быть заключены в символы #и указаны с использованием инвариантной культуры. Примеры:- #2018-03-22#
- #2018-03-22 13:18:51#
- #2018-03-22 13:18:51.94944#
 
- Константы DateOnly и TimeOnly должны быть заключены между строками #!и!#. Примеры:- #!2026-01-01!#
- #!12:23:45!#
 
- Логические константы:- true,- Trueили- TRUE
- false,- Falseили- FALSE
 
Логические операторы¶
Вы можете использовать следующие логические операторы для объединения отдельных выражений в строке фильтра:
- &&,- and,- Andили- AND
- ||,- or,- Orили- OR
Операторы и функции¶
В следующей таблице перечислены доступные операторы и функции для построения выражений фильтра:
| Операторы и функции | Описание | Пример | 
|---|---|---|
| =или== | Равно | [Price] = 500 | 
| !=или<> | Не равно | [Price] != 500 | 
| < | Меньше чем | [Price] < 700 | 
| > | Больше чем | [Price] > 600 | 
| <= | Меньше или равно | [Price] <= 600 | 
| >= | Больше или равно | [Price] >= 800 | 
| is null | Выбирает значения null | [Region] is null | 
| is not null | Выбирает значения не null | [Region] is not null | 
| IsNull | Выбирает значения null | IsNull([Region]) | 
| IsNullOrEmpty | Выбирает значения null и пустые строки | IsNullOrEmpty([Region]) | 
| In | Выбирает элементы, имеющие любое из указанных значений. | [City] In ('Beijing', 'Shenzhen', 'Chengdu') | 
| Contains | Выбирает элементы, содержащие указанную строку. Оператор Contains нечувствителен к регистру. | Contains([Name], 'lan') | 
| StartsWith | Выбирает элементы, начинающиеся с указанной строки. Оператор StartsWith нечувствителен к регистру. | StartsWith([Product], 'CPU') | 
| EndsWith | Выбирает элементы, заканчивающиеся указанной строкой. Оператор EndsWith нечувствителен к регистру. | EndsWith([Product], '9950X') | 
| !,not,NotилиNOT | Оператор отрицания | !Contains([Maker], 'amd') | 
* Эта страница была переведена с помощью нейросети Deepseek.