Фильтрация и поиск¶
Контролы TreeList и TreeView поддерживают фильтрацию данных и поиск, позволяя пользователю находить узлы по содержащимся в них значениям.
Панель поиска (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
для типов данных String и Object. Эта опция эквивалентна опцииEquals
для других типов данных.Equals
— Значения узлов в целевом столбце должны соответствовать введенному значению.StartsWith
— Значения узлов в целевом столбце должны начинаться с введенного значения. Этот режим подходит для строковых значений.
Свойство ColumnBase.AutoFilterValue
позволяет вам установить значение для конкретной ячейки строки автоматической фильтрации в коде. Вы можете использовать ColumnBase.AutoFilterValue
для фильтрации TreeList, даже если строка автоматической фильтрации скрыта.
Режим фильтрации контрола по умолчанию заключается в отображении только тех узлов, которые соответствуют указанным критериям. Установите для свойства TreeListControlBase.FilterMode
значение FilterMode.ShowMatchesWithAncestors
, чтобы отображать целевые узлы вместе с их родительскими.
Пример¶
Следующий код активирует строку автоматической фильтрации и отображает узлы, значения которых в столбце "Имя" начинаются с "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.
Предполагается, что пример содержит кнопку переключения "Включить фильтр", которая активирует и деактивирует пользовательскую фильтрацию. При нажатии на кнопку обработчик события ToggleButton.IsCheckedChanged
вызывает метод RefreshData
для обновления узлов TreeList и повторного вызова события CustomNodeFilter
.
<ToggleButton Name="btnEnableFilter" Content="Enable Filter" IsCheckedChanged="BtnEnableFilter_IsCheckedChanged"/>
<mxtl:TreeListControl x:Name="treeList" CustomNodeFilter="TreeList_CustomNodeFilter">
<!-- ... -->
using Eremex.AvaloniaUI.Controls.DataGrid;
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;
}
Фильтр в коде¶
Свойства DataControlBase.SearchText
и ColumnBase.AutoFilterValue
можно использовать для фильтрации контролов TreeList и TreeView в коде, даже если панель поиска и строка автоматической фильтрации скрыты.
Если вы используете свойство DataControlBase.SearchText
, TreeList фильтрует узлы путем поиска введенного текста во всех столбцах. Используется операция сравнения Contains
.
Если вы используете свойство ColumnBase.AutoFilterValue
, TreeList выполняет поиск введенного текста в указанном столбце. Свойство ColumnBase.AutoFilterCondition
определяет операцию сравнения.
Поиск узлов в коде¶
Используйте метод TreeListControlBase.FindNode
для получения узлов, соответствующих пользовательским критериям. Смотрите следующую ссылку для получения дополнительной информации: Поиск узлов .
* Эта страница была создана автоматически с помощью сервиса машинного перевода Яндекс Переводчик.