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

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

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

- Функция поиска нечувствительна к регистру.
- Для поиска указанного текста в строках используется оператор сравнения Contains.
- Контрол Data Grid ищет указанный текст во всех своих столбцах.
Установите свойство SearchPanelDisplayMode контрола (унаследованное от класса DataControlBase) в одно из следующих значений, чтобы включить панель поиска:
SearchPanelDisplayMode.Always— Контрол постоянно отображает панель поиска.SearchPanelDisplayMode.HotKey— Контрол отображает панель поиска, когда пользователь нажимает горячую клавишу CTRL+F. Сочетание ESC очищает панель поиска. Последующее нажатие клавиши ESC закрывает панель. Пользователь также может активировать панель поиска из контекстного меню заголовка столбца.
Связанный API¶
DataControlBase.IsSearchPanelVisible— Получает, видима ли в данный момент панель поиска.DataControlBase.SearchPanelHighlightResults— Указывает, следует ли подсвечивать искомый текст в найденных строках. Значение свойства по умолчанию —true.DataControlBase.SearchText— Получает или задает текст для поиска. Вы можете присвоить значение этому свойству, чтобы отфильтровать контрол в коде. Эта функциональность фильтрации поддерживается, даже если панель поиска скрыта или отключена (свойствоSearchPanelDisplayModeустановлено вSearchPanelDisplayMode.Never).DataControlBase.ShowSearchPanelCloseButton— Позволяет скрыть встроенную кнопку закрытия на панели поиска.
Пример¶
Следующий код включает панель поиска. Свойство SearchText используется для установки текста поиска.
Строка автофильтра¶
Строка автофильтра — это специальная строка, отображаемая над всеми строками грида. Она позволяет пользователю вводить текст в ее ячейки для фильтрации данных по соответствующим столбцам.

Установите свойство DataGridControl.ShowAutoFilterRow в true, чтобы включить строку автофильтра.
Вы можете использовать свойство ColumnBase.AutoFilterCondition, чтобы указать операцию сравнения данных для конкретных ячеек (столбцов) строки автофильтра. Когда пользователь вводит текст, контрол Data Grid использует указанную операцию сравнения для сравнения значений столбцов при поиске целевых строк. Поддерживаются следующие операции сравнения данных:
Equals— Значения строк в целевом столбце должны совпадать с введенным значением.Contains— Значения строк в целевом столбце должны содержать введенное значение. Этот режим подходит для строковых значений.StartsWith— Значения строк в целевом столбце должны начинаться с введенного значения. Этот режим подходит для строковых значений.Default— ОпцияDefaultэквивалентна опцииContainsдля строковых типов данных и Object. Эта опция эквивалентнаEqualsдля других типов данных.
Свойство ColumnBase.AutoFilterValue позволяет задать значение для конкретной ячейки строки автофильтра в коде. Вы можете использовать ColumnBase.AutoFilterValue для фильтрации Data Grid, даже если строка автофильтра скрыта.
Функция фильтрации нечувствительна к регистру.
Пример¶
Следующий код активирует строку автофильтра и отображает строки, значения в столбце 'Name' которых начинаются с "M".
using Eremex.AvaloniaUI.Controls.DataControl;
using Eremex.AvaloniaUI.Controls.DataGrid;
dataGrid1.ShowAutoFilterRow = true;
GridColumn colName = dataGrid1.Columns["Name"];
colName.AutoFilterCondition = AutoFilterCondition.StartsWith;
colName.AutoFilterValue = "M";
Динамическая фильтрация строк с использованием события¶
Вы можете обработать событие CustomRowFilter, чтобы скрывать определенные строки на основе пользовательского условия.
Событие CustomRowFilter возникает для каждого элемента в привязанном источнике элементов в следующих случаях:
- Источник элементов контрола изменяется.
- Строки контрола фильтруются (например, с использованием панели поиска и строки автофильтра).
- Вызывается метод
RefreshDataконтрола.
Используйте параметр события SourceItemIndex для идентификации текущего обрабатываемого элемента. Чтобы скрыть соответствующую строку, установите параметр события Visible в false.
Пример - Фильтрация строк с помощью события¶
В следующем примере контрол Data Grid отображает список объектов EmployeeInfo. Событие CustomRowFilter обрабатывается для реализации пользовательской фильтрации строк. Строки скрываются в соответствии со значением свойства EmployeeInfo.EmploymentType.
Предполагается, что в примере есть кнопка-переключатель "Enable Filter", которая активирует и деактивирует пользовательскую фильтрацию. При нажатии на кнопку обработчик события ToggleButton.IsCheckedChanged вызывает метод RefreshData для обновления строк грида и повторного вызова события CustomRowFilter.
<ToggleButton Name="btnEnableFilter" Content="Enable Filter" IsCheckedChanged="BtnEnableFilter_IsCheckedChanged" />
<mxdg:DataGridControl x:Name="dataGrid" Grid.Row="1" ItemsSource="{Binding Employees}"
CustomRowFilter="DataGrid_CustomRowFilter">
<!-- ... -->
using Eremex.AvaloniaUI.Controls.DataGrid;
private void BtnEnableFilter_IsCheckedChanged(object sender, Avalonia.Interactivity.RoutedEventArgs e)
{
dataGrid.RefreshData();
}
private void DataGrid_CustomRowFilter(object sender, DataGridCustomRowFilterEventArgs e)
{
bool filterEnabled = btnEnableFilter.IsChecked == true;
if (!filterEnabled)
return;
DataGridControl grid = sender as DataGridControl;
IList<EmployeeInfo> dataSource = grid.ItemsSource as IList<EmployeeInfo>;
EmployeeInfo employee = dataSource[e.SourceItemIndex];
e.Visible = employee.EmploymentType != EmploymentType.Contract;
}
Фильтрация в коде¶
Начиная с версии 1.2, вы можете использовать свойство DataGridControl.FilterString для фильтрации данных контрола в коде.

Строка фильтра состоит из отдельных выражений фильтра, объединенных логическими операторами (AND или OR).
Очистка и отключение фильтра¶
- Чтобы очистить фильтр, установите свойство
FilterStringвnullили пустую строку. - Чтобы временно отключить фильтр, используйте свойство
DataControlBase.IsFilterEnabled.
Указание столбцов¶
В строке фильтра на столбцы следует ссылаться по их именам полей, заключенным в квадратные скобки. Примеры:
[FirstName][Position]
Указание констант¶
- Числовые константы должны указываться с использованием стандартных числовых форматов. Примеры:
500,010.314,.512.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илиTRUEfalse,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.