Quick Filters
The Quick Filter appears above a Grid and provides options for filtering data from it.

There are two ways to create Quick Filters
- via the QuickFilterAttribute.
- via TypeScript code.
Creating Quick Filters
Using Attributes
You can create Quick Filter by applying the [QuickFilter] attribute to a Property in a Column.cs file. Editors applied to the Column, via the Serenity Row Class will be used for the Filter.
[ColumnsScript("ExampleColumns")]
[BasedOnRow(typeof(Entities.ExampleRow))]
public class ExampleColumns
{
    public String NonQuickFilteredField { get; set; }
    [QuickFilter]
    public String QuickFilteredField { get; set; }
    [QuickFilter]
    public String AnotherQuickFilteredField { get; set; }
}
Using Code
To create a Quick Filter via Code you override the getQuickFilters() function in the Grid.ts file and return an array of Filters to create.
protected getQuickFilters(): Serenity.QuickFilter<Serenity.Widget<any>, any>[] {
    //Gets the Filters defined in the Columns or in parent grids.
    let filters = super.getQuickFilters();
    //Insert a new checkbox filter for seeing if the column DeletedOn (date) is not Null
    //Show or hide deleted items option
    filters.push({
        field: EntityRow.Fields.DeletedOn,
        type: Serenity.BooleanEditor,
        title: "Show Deleted",
        handler: h => {
            h.active = !!h.value;
            if (h.active) {
                h.request.Criteria = Serenity.Criteria.and(h.request.Criteria,
                ['is not null', [EntityRow.Fields.DeletedOn]]);
            } else {
                h.request.Criteria = Serenity.Criteria.and(h.request.Criteria,            
                ['is null', [EntityRow.Fields.DeletedOn]]);                
            }
        }
    });
    return filters;
}
Quick Filter Options
The quick filter options are configured via the QuickFilterOption attribute.
Options
| Option | Type | Description | 
|---|---|---|
| Multiple | boolean | Allows the Quick Filter to have multiple values. | 
| CascadeField | String | |
| CascadeFrom | String | |
| CascadeValue | Any | |
| FilterField | String | The ID, Name or LookupInclude field to filter the Lookup by. | 
| FilterValue | Any | The value of the Filter field to filter the Lookup by. | 
How To's
Setting Default Filter Value
To set the default value for a Quick Filter, you must override the fields in the init function in the getQuickFilters function in aGrid.ts file.
protected getQuickFilters(): Serenity.QuickFilter<Serenity.Widget<any>, any>[] {
    //get the quick filters already defined via attributes
    let filters = super.getQuickFilters();
    //row fields
    let fld = OrderRow.Fields;
    Q.first(filters, x => x.field == fld.NameOfQuickFilterField).init = w => {
        //For enum lookups (value is string) and for bool yes, no drop downs
        (w as Serenity.EnumEditor).value = "1";
        //For lookups (value is string) 
        (w as Serenity.LookupEditor).value = "";
    };
    return filters;
}