Conditional Formatting Filters
- 5 minutes to read
The GridControl allows you to specify Conditional Formatting rules and apply filters based on these rules:
#Specify Conditional Formatting Rules
Use the TableView.FormatConditions / TreeListView.FormatConditions property to define conditional formatting rules:
<dxg:GridControl x:Name="grid">
<dxg:GridControl.View>
<dxg:TableView>
<dxg:TableView.FormatConditions>
<dxg:TopBottomRuleFormatCondition FieldName="UnitPrice" Rule="TopPercent"
Threshold="10" PredefinedFormatName="LightRedFillWithDarkRedText" />
<dxg:TopBottomRuleFormatCondition FieldName="UnitPrice" Rule="BelowAverage"
PredefinedFormatName="YellowFillWithDarkYellowText" />
<dxg:FormatCondition FieldName="Quantity" ValueRule="LessOrEqual"
Value1="5" PredefinedFormatName="BoldText" />
<dxg:FormatCondition FieldName="Discount" ValueRule="Greater"
Value1="0" PredefinedFormatName="GreenFillWithDarkGreenText" ApplyToRow="True" />
<dxg:FormatCondition Expression="Contains([Country], 'Sw')"
PredefinedFormatName="ItalicText" ApplyToRow="True" />
</dxg:TableView.FormatConditions>
</dxg:TableView>
</dxg:GridControl.View>
</dxg:GridControl>
Tip
#Apply Conditional Formatting Filters
#Column Context Menu
Select conditional formatting filters in the column Context Menu:
You can use the TableView.AllowFormatConditionFiltersMenu / TreeListView.AllowFormatConditionFiltersMenu property to hide the Format Condition Filters menu item from all column menus. The ColumnBase.AllowFormatConditionFiltersMenu property controls the item visibility for each column.
#Filter Editor
Select conditional formatting filters in the Filter Editor:
#Excel-style Drop-down Filter
Select conditional formatting filters in the Excel-style Drop-down Filter:
You can hide the Format condition filters item from the Filter Editor and Excel-style Drop-down Filter for a column. To do this, set the ColumnBase.AllowedFormatConditionFilters property to None.
#Format Condition Filter Element
Select conditional formatting filters in the FormatConditionFilterElement:
Add a FormatConditionFilterElement to the markup and specify the target GridControl and a column. The filter element lists all available conditional formats for the specified column:
<dxg:GridControl x:Name="grid" ... />
<!-- ... -->
<dxfui:FormatConditionFilterElement FieldName="UnitPrice" Context="{Binding FilteringContext, ElementName=grid}"/>
#In Code
Specify a filter string or filter criteria in code. The GridControl finds a corresponding conditional format rule and applies a filter that is based on this rule.
Note
If you specified a conditional formatting filter and then decided to change the conditional format on which the filter is based, the Grid
The code sample below applies a filter that is based on the following conditional format:
<dxg:TopBottomRuleFormatCondition FieldName="UnitPrice" Rule="BelowAverage" PredefinedFormatName="YellowFillWithDarkYellowText" />
grid.FilterString = "[@BelowAverage]([UnitPrice])";
// or
grid.FilterCriteria = new FunctionOperator("@BelowAverage", new OperandProperty("UnitPrice"));
The following code sample applies a filter that is based on the conditional format below:
<dxg:FormatCondition FieldName="Quantity" ValueRule="LessOrEqual" Value1="5" PredefinedFormatName="BoldText" />
grid.FilterString = "[@LessOrEqual]([Quantity], 5)";
// or
grid.FilterCriteria = new FunctionOperator("@LessOrEqual", new OperandProperty("Quantity"), new OperandValue(5));
Tip
To build a filter string, you can apply a filter to the Grid
The following code samples demonstrate how to apply conditional formatting filters:
grid.FilterString = "[@Equal]([Profit], 10)";
grid.FilterString = "[@NotEqual]([Profit], 10)";
grid.FilterString = "[@Greater]([Profit], 10)";
grid.FilterString = "[@GreaterOrEqual]([Profit], 10)";
grid.FilterString = "[@Less]([Profit], 10)";
grid.FilterString = "[@LessOrEqual]([Profit], 10)";
grid.FilterString = "[@Between]([Profit], 10, 20)";
grid.FilterString = "[@NotBetween]([Profit], 10, 20)";
grid.FilterString = "[@Expression]([Profit], '[Profit]=5')";
grid.FilterString = "[@TopItems]([Profit], 10)";
grid.FilterString = "[@TopPercent]([Profit], 10)";
grid.FilterString = "[@BottomItems]([Profit], 10)";
grid.FilterString = "[@BottomPercent]([Profit], 10)";
grid.FilterString = "[@AboveAverage]([Profit])";
grid.FilterString = "[@BelowAverage]([Profit])";
grid.FilterString = "[@Unique]([Profit])";
grid.FilterString = "[@Duplicate]([Profit])";
If a conditional format is applied to the entire row, you should specify the column to which you want to apply a conditional formatting filter.
The code sample below applies a conditional formatting filter to the Country column. The filter is based on the following conditional format:
<dxg:FormatCondition FieldName="Discount" ValueRule="Greater" Value1="0" PredefinedFormatName="GreenFillWithDarkGreenText" ApplyToRow="True" />
The first parameter is the filtered column’s name and the second is the conditional format’s field name:
grid.FilterString = "[@Greater]([Country], [Discount], 0)";
// or
grid.FilterCriteria = new FunctionOperator("@Greater", new OperandProperty("Country"), new OperandProperty("Discount"), new OperandValue(0));
If an expression condition is applied to the entire row and it does not have a field name, specify []
as the second parameter.
The code sample below applies a conditional formatting filter to the Country column. The filter is based on the following conditional format:
<dxg:FormatCondition Expression="Contains([Country], 'Sw')" PredefinedFormatName="ItalicText" ApplyToRow="True" />
#Limitations
- You cannot apply conditional formatting filters to a column with the ColumnBase.ColumnFilterMode property set to DisplayText.
- You cannot apply filters based on IconSetFormatCondition and ColorScaleFormatCondition in code.
- Filters based on the DataBarFormatCondition conditional format are not supported.
- Filters based on the TopBottomRuleFormatCondition / UniqueDuplicateRuleFormatCondition conditional formats cannot be used with Server Mode and Virtual Sources.
- Filters based on the TopBottomRuleFormatCondition conditional formats do not work with Custom Sorting.
- Filters based on the TopBottomRuleFormatCondition / UniqueDuplicateRuleFormatCondition conditional formats with the specified Expression property are not supported.
- Filters based on the TopBottomRuleFormatCondition / UniqueDuplicateRuleFormatCondition are not supported in the TreeListView.
- If you applied a conditional formatting filter, the Data-aware Export discards all the conditional formats applied to the GridControl except the FormatCondition conditional formats.