DxFilterBuilder.FilterCriteriaChanged Event
Fires when a user changes filter criteria.
Namespace: DevExpress.Blazor
Assembly: DevExpress.Blazor.v25.2.dll
NuGet Package: DevExpress.Blazor
Declaration
[Parameter]
public EventCallback<CriteriaOperator> FilterCriteriaChanged { get; set; }
Parameters
| Type | Description |
|---|---|
| CriteriaOperator | The new FilterCriteria property value. |
Remarks
Use the FilterCriteria property to specify filter expression and build the corresponding filter condition. When a user changes filter criteria in the UI, the component raises the FilterCriteriaChanged event. This event is handled automatically when you use two-way data binding for the FilterCriteria property (@bind-FilterCriteria).
The following code snippet binds the Filter Builder to the DevExpress Blazor Grid component using the FilterCriteria property. An Apply button click filters grid data using a DxGrid.SetFilterCriteria method call. A Clear button click clears all filter conditions.

<DxFilterBuilder @bind-FilterCriteria="FilterCriteria">
<Fields>
<DxFilterBuilderField FieldName="ProductName" Caption="Product Name" Type="@typeof(string)" />
<DxFilterBuilderField FieldName="CategoryId" Caption="Category" Type="@typeof(int)">
<EditSettings>
<DxComboBoxSettings Data="Categories" ValueFieldName="CategoryId" TextFieldName="CategoryName" />
</EditSettings>
</DxFilterBuilderField>
<DxFilterBuilderField FieldName="SupplierId" Caption="Supplier" Type="@typeof(int)">
<EditSettings>
<DxComboBoxSettings Data="Suppliers" ValueFieldName="SupplierId" TextFieldName="CompanyName">
<ItemDisplayTemplate>
@{
var item = (Supplier)context.DataItem;
}
@item.CompanyName (@item.ContactName)
</ItemDisplayTemplate>
</DxComboBoxSettings>
</EditSettings>
<Fields>
<DxFilterBuilderField FieldName="Supplier.CompanyName" Caption="Company Name" CaptionFullPath="Supplier.Company Name" Type="@typeof(string)" />
<DxFilterBuilderField FieldName="Supplier.ContactName" Caption="Contact Name" CaptionFullPath="Supplier.Contact Name" Type="@typeof(string)" />
</Fields>
</DxFilterBuilderField>
<DxFilterBuilderField FieldName="UnitPrice" Caption="Unit Price" Type="@typeof(int)" />
<DxFilterBuilderField FieldName="UnitsInStock" Caption="Units in Stock" Type="@typeof(int)" />
<DxFilterBuilderField FieldName="QuantityPerUnit" Caption="Quantity per Unit" Type="@typeof(int)" />
<DxFilterBuilderField FieldName="Discontinued" Type="@typeof(bool)" />
</Fields>
</DxFilterBuilder>
<div>
<DxButton Text="Clear" Click="ClearFilterCriteria" RenderStyle="ButtonRenderStyle.Secondary"/>
<DxButton Text="Apply" Click="ApplyFilterCriteria" />
</div>
<DxGrid @ref="Grid" Data="Data"
PageSize="15"
ColumnResizeMode="GridColumnResizeMode.NextColumn"
TextWrapEnabled="false" VirtualScrollingEnabled="true"
FilterCriteriaChanged="GridFilterCriteriaChanged"
FilterMenuButtonDisplayMode="GridFilterMenuButtonDisplayMode.Always">
<Columns>
<DxGridDataColumn FieldName="ProductName" MinWidth="100" />
<DxGridDataColumn FieldName="Category.CategoryName" Caption="Category" MinWidth="100" />
<DxGridDataColumn FieldName="Supplier.CompanyName" Caption="Company Name" MinWidth="100" />
<DxGridDataColumn FieldName="Supplier.ContactName" Caption="Contact Name" MinWidth="100" />
<DxGridDataColumn FieldName="UnitPrice" DisplayFormat="c" Width="10%" />
<DxGridDataColumn FieldName="UnitsInStock" Caption="Units in Stock" Width="10%" />
<DxGridDataColumn FieldName="QuantityPerUnit" Caption="Quantity per Unit" Width="15%" MinWidth="80" />
<DxGridDataColumn FieldName="Discontinued" Width="10%" MinWidth="90" />
</Columns>
</DxGrid>
@code {
IGrid Grid { get; set; }
object Data { get; set; }
CriteriaOperator FilterCriteria { get; set; } = CriteriaOperator.Parse("StartsWith([ProductName], 'C') And ([UnitPrice] < 50 Or [Discontinued] = true)");
IEnumerable<Product> Products { get; set; }
IEnumerable<Category> Categories { get; set; }
IEnumerable<Supplier> Suppliers { get; set; }
List<Category> SelectedCategories { get; set; } = [];
protected override async Task OnInitializedAsync() {
Suppliers = await NwindDataService.GetSuppliersAsync();
Categories = await NwindDataService.GetCategoriesAsync();
Products = await NwindDataService.GetProductsAsync();
// ...
}
protected override void OnAfterRender(bool firstRender) {
base.OnAfterRender(false);
if (firstRender && Grid != null)
ApplyFilterCriteria();
}
void ApplyFilterCriteria() {
Grid.SetFilterCriteria(FilterCriteria);
}
void ClearFilterCriteria() {
FilterCriteria = null;
Grid.ClearFilter();
}
void GridFilterCriteriaChanged(GridFilterCriteriaChangedEventArgs args) {
FilterCriteria = args.FilterCriteria;
}
}