calculateFilterExpression
This function must return a filter expression. The simplest filter expression has the following format:
[selector, selectedFilterOperation, filterValue]
- selector
A data source field to be filtered. selectedFilterOperation
A comparison operator. One of the following: "=", "<>", ">", ">=", "<", "<=", "between", "startswith", "endswith", "contains", "notcontains".NOTEFor the "between" operator, the returned filter expression has a slightly different format:[[selector, ">=", startValue], "and", [selector, "<=", endValue]]
.filterValue
A user input value. Values the selector provides are compared to this value.
In the following code, the calculateFilterExpression function implements an exclusive between operation. This is done by overriding the default inclusive implementation.
jQuery
$(function() { $("#filterBuilderContainer").dxFilterBuilder({ // ... fields: [{ calculateFilterExpression: function (filterValue, selectedFilterOperation) { if (selectedFilterOperation === "between" && $.isArray(filterValue)) { var filterExpression = [ [this.dataField, ">", filterValue[0]], "and", [this.dataField, "<", filterValue[1]] ]; return filterExpression; } // Invokes the default filtering behavior return this.defaultCalculateFilterExpression.apply(this, arguments); }, // ... }] }); });
Angular
import { DxFilterBuilderModule } from "devextreme-angular"; // ... export class AppComponent { calculateFilterExpression (filterValue, selectedFilterOperation) { let field = this as any; if (selectedFilterOperation === "between" && Array.isArray(filterValue)) { var filterExpression = [ [field.dataField, ">", filterValue[0]], "and", [field.dataField, "<", filterValue[1]] ]; return filterExpression; } // Invokes the default filtering behavior return field.defaultCalculateFilterExpression(arguments); } } @NgModule({ imports: [ // ... DxFilterBuilderModule ], // ... })
<dx-filter-builder ... > <dxi-field [calculateFilterExpression]="calculateFilterExpression" ... ></dxi-field> </dx-filter-builder>
In the previous code, the defaultCalculateFilterExpression function invokes the default behavior. You can omit the function call if you do not need it.
this
keyword refers to the field's configuration.caption
If you do not specify this option, the FilterBuilder generates the caption based on the dataField option. For example, if dataField is "fullName", the caption is "Full Name".
dataType
Use the FilterBuilderFieldDataType
enum to specify this option when the widget is used as an ASP.NET MVC 5 Control or a DevExtreme-Based ASP.NET Core Control. This enum accepts the following values: String
, Number
, Date
, DateTime
, Boolean
, and Object
.
editorComponent
An alias for the editorTemplate option specified in React. Accepts a custom component. Refer to Using a Custom Component for more information.
editorOptions
Depending on the dataType, the FilterBuilder offers a user different widgets for editing: TextBox, DateBox, Lookup, etc. In the editorOptions object, you can specify options for the widget.
Do not specify the onValueChanged option in this object. If you need to add custom logic to the standard value change handler, override the handler in the onEditorPreparing function in the following manner.
jQuery
$(function() { $("#filterBuilderContainer").dxFilterBuilder({ // ... onEditorPreparing: function(e) { if (e.dataField == "requiredDataField") { var standardHandler = e.editorOptions.onValueChanged; e.editorOptions.onValueChanged = function(e) { // Overriding the standard handler // ... // Custom commands go here // ... standardHandler(e); // Calling the standard handler to save the edited value } } } }); });
Angular
import { DxFilterBuilderModule } from "devextreme-angular"; // ... export class AppComponent { onEditorPreparing (e) { if (e.dataField == "requiredDataField") { let standardHandler = e.editorOptions.onValueChanged; e.editorOptions.onValueChanged = function (e) { // Overriding the standard handler // ... // Custom commands go here // ... standardHandler(e); // Calling the standard handler to save the edited value } } } } @NgModule({ imports: [ // ... DxFilterBuilderModule ], // ... })
<dx-filter-builder ... (onEditorPreparing)="onEditorPreparing($event)"> </dx-filter-builder>
editorRender
An alias for the editorTemplate option specified in React. Accepts a rendering function. Refer to Using a Rendering Function for more information.
editorTemplate
Name | Type | Description |
---|---|---|
field |
The condition's configuration. |
|
filterOperation |
The condition's operation. |
|
setValue |
A method that you should call to change the field value after the editor's value is changed. |
|
value | | | |
The condition's data field value. |
falseText
Specifies the false value text. Applies only if dataType is "boolean".
filterOperations
The following table lists default operations by data type:
dataType | filterOperations |
---|---|
"string" | [ "contains", "notcontains", "startswith", "endswith", "=", "<>", "isblank", "isnotblank" ] |
"numeric" | [ "=", "<>", "<", ">", "<=", ">=", "between", "isblank", "isnotblank" ] |
"date", "datetime" | [ "=", "<>", "<", ">", "<=", ">=", "between", "isblank", "isnotblank" ] |
"boolean" | [ "=", "<>", "isblank", "isnotblank" ] |
"object" | [ "isblank", "isnotblank" ] |
The "isblank" operation returns null values and empty strings; "isnotblank" returns other values.
Use the FilterBuilderFieldFilterOperations
enum to specify this option when the widget is used as an ASP.NET MVC 5 Control or a DevExtreme-Based ASP.NET Core Control. This enum accepts the following values: Equal
, NotEqual
, LessThan
, LessThanOrEqual
, GreaterThan
, GreaterThanOrEqual
, Between
, NotContains
, Contains
, StartsWith
, EndsWith
, IsBlank
, and IsNotBlank
.
format
This option also controls the user input in cells that use the DateBox widget for editing. For cells that use other widgets, you can specify the editorOptions.format option.
jQuery
$(function(){ $("#filterBuilderContainer").dxFilterBuilder({ fields: [{ dataField: "SaleAmount", format: "currency", editorOptions: { format: "$ #,##0.##" } }, // ... ] }); });
Angular
import { DxFilterBuilderModule } from "devextreme-angular"; // ... export class AppComponent { fields = [{ dataField: "SaleAmount", format: "currency", editorOptions: { format: "$ #,##0.##" } }, // ... ]; } @NgModule({ imports: [ // ... DxFilterBuilderModule ], // ... })
<dx-filter-builder [fields]="fields"> </dx-filter-builder>
See Also
name
Specifies the field's name. Use it to distinguish the field from other fields when they have identical dataField values.
trueText
Specifies the true value text. Applies only if dataType is "boolean".