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:
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>
<dx:ASPxReportDesigner EnableRichTextEditor="False" ID="ASPxReportDesigner1" runat="server">
<ClientSideEvents BeforeRender="OnBeforeRender"/>
</dx:ASPxReportDesigner>
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.