Skip to main content

VGridControl.QueryCustomFunctions Event

Allows you to add custom-function-based filters (for example, ‘discount is more than 15%’) to Excel-style pop-up filter menus and/or the filter editor.

Namespace: DevExpress.XtraVerticalGrid

Assembly: DevExpress.XtraVerticalGrid.v23.1.dll

NuGet Package: DevExpress.Win.VerticalGrid


public event QueryCustomFunctionsEventHandler QueryCustomFunctions

Event Data

The QueryCustomFunctions event's data class is DevExpress.XtraVerticalGrid.CustomFunctionEventArgs.


To create a custom filter function (for example, ‘discount is more than 15%’), and add this function to Excel-style pop-up filter menus and/or the filter editor, do the following:

  • implement a custom function
  • register the function
  • add the function to pop-up filter menus and the filter editor in a QueryCustomFunctions event handler


The example below shows how to add the Black Friday Discount filter to a grid view.


using DevExpress.Data.Filtering;

gridView1.QueryCustomFunctions += OnQueryCustomFunctions;

void OnQueryCustomFunctions(object sender, CustomFunctionEventArgs e) {
    if(e.PropertyName == "Discount")

public class IsBlackFridayDiscountFunction : ICustomFunctionDisplayAttributes {
    public const string FunctionName = "IsBlackFridayDiscount";
    static readonly IsBlackFridayDiscountFunction Instance = new IsBlackFridayDiscountFunction();
    IsBlackFridayDiscountFunction() { }
    public static void Register() {
    public static bool Unregister() {
        return CriteriaOperator.UnregisterCustomFunction(Instance);
    #region ICustomFunctionOperatorBrowsable Members
    public FunctionCategory Category {
        get { return FunctionCategory.Math; }
    public string Description {
        get { return "The discount amount is 15% or more."; }
    public bool IsValidOperandCount(int count) {
        return count == 1;
    public bool IsValidOperandType(int operandIndex, int operandCount, Type type) {
        return DevExpress.Data.Summary.SummaryItemTypeHelper.IsNumericalType(type);
    public int MaxOperandCount {
        get { return 1; }
    public int MinOperandCount {
        get { return 1; }
    #region ICustomFunctionDisplayAttributes
    public string DisplayName {
        get { return "Is Black Friday Discount"; }
    public object Image {
        get { return "bo_price"; }
    #region ICustomFunctionOperator Members
    public object Evaluate(params object[] operands) {
        double discount = Convert.ToDouble(operands[0]);
        return discount >= 0.15;
    public string Name {
        get { return FunctionName; }
    public Type ResultType(params Type[] operands) {
        return typeof(bool);


Run the following demo and click Open Solution for the complete example: XtraGrid.

In the case of a Code First data source, you can annotate data fields with the CustomFunction attribute.

public double Discount { get; set; }


To add custom functions to filter menus, filter editors, and conditional formatting dialogs of all DevExpress controls in the application, use the static (Shared in VB) QueryCustomFunctions event.

See Also