Back to Devexpress

Custom Functions in the Expression Editor (WinForms)

xtrareports-403294-desktop-reporting-winforms-reporting-end-user-report-designer-for-winforms-api-and-customization-custom-functions-in-the-expression-editor.md

latest6.7 KB
Original Source

Custom Functions in the Expression Editor (WinForms)

  • Aug 18, 2023
  • 4 minutes to read

The custom function described in this topic is available in the Expression Editor invoked from the Report Designer. If you want your custom function to be available for SQL queries in the Data Source Wizard or elsewhere in the application outside of Report components, implement the ICustomFunctionOperatorFormattable interface and register the function with the CriteriaOperator.RegisterCustomFunction method.

Review the following help topic for more information: Custom Functions.

Create a Custom Function (WinForms Report Designer)

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

The following code defines a custom function in the String category:

csharp
using DevExpress.XtraReports.Expressions;
using System;

namespace CustomFunctionForExpressionEditorExample
{
    public class CustomFormatFunction : ReportCustomFunctionOperatorBase
    {
        public override string FunctionCategory 
            => "String";
        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);
        }
    }
}
vb
#Region "#usings"
Imports DevExpress.XtraReports.Expressions
Imports System
#End Region

Namespace CustomFunctionForExpressionEditorExample
    #Region "#CustomFormatFunction"
    Public Class CustomFormatFunction
        Inherits ReportCustomFunctionOperatorBase

        Public Overrides ReadOnly Property FunctionCategory() As String
            Get
                Return "String"
            End Get
        End Property
        Public Overrides ReadOnly Property Description() As String
            Get
                Return "CustomFormatFunction(string format, object arg0)" _
                & ControlChars.CrLf & "Converts an arg0 value to a string based on a specified format"
            End Get
        End Property
        Public Overrides Function IsValidOperandCount(ByVal count As Integer) As Boolean
            Return count = 2
        End Function
        Public Overrides Function IsValidOperandType(ByVal operandIndex As Integer,
            ByVal operandCount As Integer, ByVal type As Type) As Boolean
            Return True
        End Function
        Public Overrides ReadOnly Property MaxOperandCount() As Integer
            Get
                Return 2
            End Get
        End Property
        Public Overrides ReadOnly Property MinOperandCount() As Integer
            Get
                Return 2
            End Get
        End Property
        Public Overrides Function Evaluate(ParamArray ByVal operands() As Object) As Object
            Dim res As String = String.Format(operands(0).ToString(), operands(1))
            Return res
        End Function
        Public Overrides ReadOnly Property Name() As String
            Get
                Return "CustomFormatFunction"
            End Get
        End Property
        Public Overrides Function ResultType(ParamArray ByVal operands() As Type) As Type
            Return GetType(String)
        End Function
    End Class
    #End Region
End Namespace

Call the static CustomFunctions.Register method to register a custom function. Pass the custom function class instance as a parameter. To unregister a custom function, use the static CustomFunctions.Unregister method.

The following code registers a custom function for use in the End-User Designer:

csharp
{
// ...
    DevExpress.XtraReports.Expressions.CustomFunctions.Register(new CustomFormatFunction());
    // ...
}
vb
Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
' ...
    DevExpress.XtraReports.Expressions.CustomFunctions.Register(New CustomFormatFunction())
    ' ...
End Sub

The Expression Editor displays the CustomFormatFunction in the String category:

Custom functions registered in the Form constructor are available only in the Report Designer on the form. They are not available in the Visual Studio Report Designer. You can proceed without the Expression Editor and use the Property Grid editor to type a custom function in an expression.

Remove a Function from the List of Available Functions

Review the following help topic for more information: Remove a Function from the Expression Editor

Unregister a Function

If you remove a function from the list of available functions, the function remains recognized, and expressions with that function remain valid and can be calculated. To compose a new expression manually, type a function name.

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