Skip to Content
Custom Filters

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