TreeList.FilterPopupExcelData Event
Allows you to add, remove, and modify data values and customize predefined filters in the Excel style pop-up filter menus. Filter items added manually on this event must be unique and sorted.
Namespace: DevExpress.XtraTreeList
Assembly: DevExpress.XtraTreeList.v24.2.dll
Declaration
[DXCategory("Behavior")]
public event FilterPopupExcelDataEventHandler FilterPopupExcelData
Event Data
The FilterPopupExcelData event's data class is DevExpress.XtraTreeList.FilterPopupExcelDataEventArgs.
Examples
A default column filter menu contains data values available in the column. The code below shows how to populate a filter menu with custom values.
Note
The example uses the grid control. The vertical grid, tree list, and pivot grid controls provide a similar API.
In this example, the processed column contains comma-separated values that can be treated as individual tokens. The FilterPopupExcelData event allows you to populate the menu with custom tokens instead of the available data values.
readonly static char[] separators = new char[] { ',', ' ' };
void OnFilterPopupExcelData(object sender, FilterPopupExcelDataEventArgs e) {
// Create a collection of tokens based on data values.
var tokens = new HashSet<string>();
for(int i = 0; i < e.Values.Length; i++) {
var parts = ((string)e.Values[i]).Split(separators, StringSplitOptions.RemoveEmptyEntries);
for(int j = 0; j < parts.Length; j++)
tokens.Add(parts[j]);
}
// Remove the default data values from the filter menu.
e.ClearData();
// Populate the menu with the created tokens.
foreach(string t in tokens.OrderBy(x => x))
e.AddData(t, t);
}
If you have populated the menu with custom tokens, you also must handle the following events:
FilterPopupExcelQueryFilterCriteria — to convert the selected tokens to the corresponding filter criteria that should be applied to data (direct conversion). This conversion is processed when the user selects a token in the menu/applies the selected tokens/closes the menu.
void OnFilterPopupExcelQueryFilterCriteria(object sender, FilterPopupExcelQueryFilterCriteriaEventArgs e) { var viewModel = e.Value as ICollectionValueViewModel<string>; var property = new OperandProperty(e.Path); var functions = viewModel.Values .Select(x => new FunctionOperator(FunctionOperatorType.Contains, property, x)); e.FilterCriteria = CriteriaOperator.Or(functions); }
FilterPopupExcelParseFilterCriteria — to convert the applied filter criteria to the corresponding tokens that should be selected in the menu (reverse conversion). This conversion is processed when the user opens the menu.
void OnFilterPopupExcelParseFilterCriteria(object sender, FilterPopupExcelParseFilterCriteriaEventArgs e) { var func = e.FilterCriteria as FunctionOperator; if(!ReferenceEquals(func, null)) e.SetValue(((OperandValue)func.Operands[1]).Value); var group = e.FilterCriteria as GroupOperator; if(!ReferenceEquals(group, null)) { var values = group.Operands .OfType<FunctionOperator>() .Select(x => ((OperandValue)x.Operands[1]).Value); e.SetValues(values.ToArray()); } }
The code snippet below changes the caption for a data value, removes default values, and adds custom filter criteria to a filter menu.
void treeList1_FilterPopupExcelData(object sender, FilterPopupExcelDataEventArgs e) {
// Change the caption for a data value in the Values tab.
e.ChangeText(null, "Nil");
// Remove a range of default data values from the Values tab.
e.DataItems.RemoveRange(5, e.DataItems.Count - 5);
if(e.Column == treeList1.Columns["Name"])
e.AddData("AB", "AB");
// Add custom filter criteria to the Filters tab.
e.AddFilter("First Filter", e.Column.FieldName + " Is Null");
e.AddFilter("Second Filter", e.Column.FieldName + " Is Not Null");
}