Skip to content

Фильтрация и поиск

Контролы TreeList и TreeView поддерживают фильтрацию данных и поиск, позволяя пользователю находить узлы по содержащимся в них значениям.

Панель поиска (TreeList и TreeView)

Панель поиска отображается в верхней части контрола TreeList/TreeView. Он предоставляет текстовое поле, в которое пользователь может ввести текст для поиска. Контролы автоматически фильтруют узлы, отображая те, которые содержат указанный текст.

treelist-searchpanel

  • Поиск данных выполняется без учета регистра
  • Оператор сравнения 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. Это позволяет пользователю вводить текст в свои ячейки, чтобы отфильтровать данные по соответствующим столбцам.

treelist-autofilterrow

  • Функциональность фильтра не чувствительна к регистру.
  • Чтобы выполнить поиск в свернутых узлах и развернуть их при обнаружении совпадения, установите для опции 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 для получения узлов, соответствующих пользовательским критериям. Смотрите следующую ссылку для получения дополнительной информации: Поиск узлов .



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