Back to Devexpress

Remove a Function from the Expression Editor

xtrareports-403273-desktop-reporting-winforms-reporting-end-user-report-designer-for-winforms-api-and-customization-remove-a-function-from-the-expression-editor.md

latest3.9 KB
Original Source

Remove a Function from the Expression Editor

  • Apr 26, 2024
  • 2 minutes to read

You can remove a function from the Expression Editor. To do this, create a ReportExpressionEditorCustomizationService descendant, override the BeforeRun method, and delete the function from the ExpressionEditorContext.Functions collection.

The following code is a custom service that removes the “Abs” function from the list of available functions in the Expression Editor:

csharp
using DevExpress.Data.Controls.ExpressionEditor;
using DevExpress.XtraReports.UserDesigner;
using System.Linq;

namespace CustomFunctionForExpressionEditorExample
{
    class CustomReportExpressionEditorCustomizationService : ReportExpressionEditorCustomizationService
    {
        public CustomReportExpressionEditorCustomizationService() {}
        public override void BeforeRun(string expressionString, 
            IExpressionEditorView expressionEditorView, 
            ExpressionEditorContext expressionEditorContext)
        {
            FunctionInfo formatStringFunc = expressionEditorContext.Functions
                .FirstOrDefault(x => x.Name == "Abs");
            expressionEditorContext.Functions.Remove(formatStringFunc);
            base.BeforeRun(expressionString, expressionEditorView, expressionEditorContext);
        }
    }
}
vb
Imports DevExpress.Data.Controls.ExpressionEditor
Imports DevExpress.XtraReports.UserDesigner

Public Class CustomReportExpressionEditorCustomizationService
    Inherits ReportExpressionEditorCustomizationService

    Public Sub New()
    End Sub
    Public Overrides Sub BeforeRun(ByVal expressionString As String,
                                   ByVal expressionEditorView As IExpressionEditorView,
                                   ByVal expressionEditorContext As ExpressionEditorContext)
        Dim formatStringFunc As FunctionInfo =
            expressionEditorContext.Functions.FirstOrDefault(Function(x) x.Name = "Abs")
        expressionEditorContext.Functions.Remove(formatStringFunc)
        MyBase.BeforeRun(expressionString, expressionEditorView, expressionEditorContext)
    End Sub
End Class

You should register the service at application startup:

csharp
{
        DevExpress.XtraReports.Expressions.CustomFunctions.Register(new NewLineConstant());
        // ...
            typeof(DevExpress.XtraReports.UserDesigner.ReportExpressionEditorCustomizationService),
            new CustomReportExpressionEditorCustomizationService());
        reportDesigner1.OpenReport(new Reports.XtraReport1());
        // ...
}
vb
Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
' ...
    reportDesigner1.AddService(GetType(ReportExpressionEditorCustomizationService),
                               New CustomReportExpressionEditorCustomizationService())
                               ' ...
End Sub

When you run the application, the Abs function is not shown in the list of available functions, but it remains valid and can be evaluated in expressions:

View Example: Expression Editor - How to Implement a Custom Function

See Also

CustomFunctions