Skip to main content
All docs
V23.2

Custom Functions in the Expression Editor (ASP.NET Web Forms)

  • 2 minutes to read

This topic describes how to add a custom function to the Expression Editor or remove a function from the list of available functions.

Add a Custom Function

Implement a Custom Function

To create a custom function, create an object that descends from the ReportCustomFunctionOperatorBase abstract class.

The following code defines a custom function CustomFormatFunction(string format, object arg0):

using DevExpress.XtraReports.Expressions;
using System;

    public class CustomFormatFunction : ReportCustomFunctionOperatorBase
    {
        public override string FunctionCategory
            => "Custom";
        public override string Description
            => "CustomFormatFunction(string format, object arg0)" +
            "\r\nConverts an arg0 value to a string based on a specified format";
        public override bool IsValidOperandCount(int count)
            => count == 2;
        public override bool IsValidOperandType(int operandIndex, int operandCount, Type type)
            => true;
        public override int MaxOperandCount
            => 2;
        public override int MinOperandCount
            => 2;
        public override object Evaluate(params object[] operands)
        {
            string res = String.Format(operands[0].ToString(), operands[1]);
            return res;
        }
        public override string Name
            => "CustomFormatFunction";
        public override Type ResultType(params Type[] operands)
        {
            return typeof(string);
        }
    }

Register a Function

Call the CustomFunctions.Register method at application startup:

void Application_Start(object sender, EventArgs e) {
    // ...
    DevExpress.XtraReports.Expressions.CustomFunctions.Register(new CustomFormatFunction());
}

Result

The following image shows a custom function (CustomFormatFunction) in the list of available functions in the Expression Editor:

Expression Editor - Web Report Designer - Custom Function

Remove a Function from the List of Available Functions

Handle the BeforeRender event and remove a function from the DevExpress.Reporting.Designer.Widgets.reportFunctionDisplay collection. To get access to a function, use the following notation where index is a function category index:

DevExpress.Reporting.Designer.Widgets.reportFunctionDisplay[index].items["function_name"]

The following code sample removes the LocalDateTimeThisYear function from the DateTime category:

<script type="text/javascript">
    function OnBeforeRender(event) {
        delete DevExpress.Reporting.Designer.Widgets.reportFunctionDisplay[1].items["LocalDateTimeThisYear"];
    }
</script>

@{
    var designerRender = Html.DevExpress().ReportDesigner("reportDesigner")
        .Height("100%")
        .ClientSideEvents(configure => configure.BeforeRender("OnBeforeRender"))
        .Bind(Model.ReportDesignerModel);
    @designerRender.RenderHtml()
}

Unregister a Function

If you remove a function from the DevExpress.Reporting.Designer.Widgets.reportFunctionDisplay collection on the client, the function is still registered and expressions with that function remain valid and can be evaluated. You can type the function name and compose a new expression manually.

If you have registered a custom function, you can call the CustomFunctions.Unregister method at application startup to unregister it:

DevExpress.XtraReports.Expressions.CustomFunctions.Unregister("CustomFormatFunction");

After this code is executed, the CustomFormatFunction function is not available in the Expression Editor and won’t be evaluated in expressions.