Skip to main content
A newer version of this page is available. .

ColumnView.FilterPopupExcelQueryFilterCriteria Event

Allows you to modify criteria expressions built when users filter Data Grid data in Excel-style filtering menus.

Namespace: DevExpress.XtraGrid.Views.Base

Assembly: DevExpress.XtraGrid.v18.2.dll

Declaration

[DXCategory("Behavior")]
public event FilterPopupExcelQueryFilterCriteriaEventHandler FilterPopupExcelQueryFilterCriteria

Event Data

The FilterPopupExcelQueryFilterCriteria event's data class is DevExpress.XtraGrid.Views.Grid.FilterPopupExcelQueryFilterCriteriaEventArgs.

Remarks

In the example below, a sample application displays video data. The “Tag” field stores video tags separated by commas as a single string. The ColumnView.FilterPopupExcelData event splits these strings into individual tags available for end-users from the “Values” tab of Excel-styled filters. The FilterPopupExcelQueryFilterCriteria event is handled to replace the default “Equals” condition with “Contains”.

Data Grid - Query Filter Expression


using DevExpress.Data.Filtering;
using DevExpress.Utils.Filtering.Internal;

//create items that represent individual tags
private void GridView1_FilterPopupExcelData(object sender, DevExpress.XtraGrid.Views.Grid.FilterPopupExcelDataEventArgs e) {
    if (e.Column.FieldName == "Tag") {
        var tags = e.DataItems.SelectMany(x => x.Text.Split(',', ';'))
            .OrderBy(x => x)
            .Distinct()
            .ToArray();
        e.DataItems.Clear();
        for (int i = 0; i < tags.Length; i++)
            e.AddData(tags[i], tags[i]);
    }
}

//modify filter criteria expressions
private void GridView1_FilterPopupExcelQueryFilterCriteria(object sender, DevExpress.XtraGrid.Views.Grid.FilterPopupExcelQueryFilterCriteriaEventArgs e) {
    if (e.Column.FieldName == "Tag") {
        var viewModel = e.Value as ICollectionValueViewModel<string>;
        OperandProperty property = new OperandProperty(e.Path);
        e.FilterCriteria = GroupOperator.Or(viewModel.Values.Select(x =>
                            new FunctionOperator(FunctionOperatorType.Contains, property, x)));
    }
}
See Also