Custom Filters
Custom Filters allow you to add programmatic WHERE conditions that aren’t expressed in the grid filter syntax.
Basic Custom Filter
// Simple static filter
CustomFilter activeOnly = (args) -> "status = 'ACTIVE'";
DevExtremeResult<Employee> result = gridDataProvider
.query(Employee.class)
.loadOptions(loadOptions)
.customFilter(activeOnly)
.executeDevExtreme();Filter with Schema Placeholder
// Filter with schema placeholder (automatically replaced at runtime)
CustomFilter tenantFilter = (args) -> "tenant_schema = '${schema}'";
DevExtremeResult<Employee> result = gridDataProvider
.query(Employee.class)
.loadOptions(loadOptions)
.schema("tenant_123")
.customFilter(tenantFilter)
.executeDevExtreme();Filter with JDBC Parameters
// Filter with JDBC parameter
CustomFilter regionFilter = (args) -> "region = :userRegion";
DevExtremeResult<Employee> result = gridDataProvider
.query(Employee.class)
.loadOptions(loadOptions)
.withParameter("userRegion", "EU")
.customFilter(regionFilter)
.executeDevExtreme();Complex Filter
CustomFilter advancedFilter = (args) ->
"(status = 'ACTIVE' AND created_date >= :startDate) " +
"OR owner_id IN (SELECT id FROM ${schema}.privileged_users)";
DevExtremeResult<Employee> result = gridDataProvider
.query(Employee.class)
.loadOptions(loadOptions)
.schema("tenant1")
.withParameter("startDate", LocalDate.now())
.customFilter(advancedFilter)
.executeDevExtreme();Multiple Custom Filters
DevExtremeResult<Employee> result = gridDataProvider
.query(Employee.class)
.loadOptions(loadOptions)
.customFilter(() -> "active = true")
.customFilter(() -> "hire_date > :startDate")
.customFilter(() -> "department_id IN (:allowedDepts)")
.withParameter("startDate", LocalDate.of(2020, 1, 1))
.withParameter("allowedDepts", List.of(1L, 2L, 3L))
.executeDevExtreme();Last updated on