Validate Parameter Values in Native Blazor Report Viewer
- 5 minutes to read
The Native Report Viewer allows you to validate report parameter values when a user changes them in the Parameters Panel. If validation fails, parameter values are not submitted and corresponding editors display red outlines, error icons, and error messages.
Handle one of the following events to validate parameter values:
- ParametersRequestValueChanged
- Handle this event to implement report parameter validation at the report level.
- Validate
- Handle this event to implement report parameter validation at the report viewer level. Allows you to validate parameters across multiple reports.
#Validate Parameter Values at Viewer Level
The Validate event allows you to detect changes at the parameter model level. Each time a parameter value changes, the model raises the Validate
event. Use the ChangedParameterModel property to access information about the changed parameter and the Error property to set the error message. The component displays the message for the corresponding parameter editor if validation fails.
The following code snippet applies a number of validation rules to report parameters:
- Multi-value parameters require at least one value
- String parameters cannot be empty
- Boolean parameters must be true
- Integer parameters must be greater than 42
- The start date of date range parameters must fall within the year 2024
@page "/reportviewer/"
@using DevExpress.Blazor.Reporting
@using DevExpress.XtraReports.Parameters.ViewModels
// ...
<DxReportViewer @ref="reportViewer" Report="Report" RootCssClasses="w-100 h-100" />
@code {
DxReportViewer reportViewer;
TestReport Report { get; set; }
protected override async Task OnAfterRenderAsync(bool firstRender) {
if (firstRender) {
Report = new TestReport();
EventHandler<ValidateParameterEventArgs> OnValidateParameters = (sender, e) => {
// Checks for multi-value parameters and ensures at least one value is selected.
if (e.ChangedParameterModel.MultiValue) {
var selectedValues = e.ChangedParameterModel.Value as string[];
if (selectedValues == null || selectedValues.Length == 0) {
e.Error = "Multi-value parameters require at least one string value.";
}
}
// Checks for string parameters and ensures they are not empty.
else if (e.ChangedParameterModel.Type == typeof(String) && string.IsNullOrEmpty(e.ChangedParameterModel.Value.ToString())) {
e.Error = "String parameters do not allow empty values.";
}
// Checks for Boolean parameters and ensures they are true.
else if (e.ChangedParameterModel.Type == typeof(bool) && (bool)e.ChangedParameterModel.Value == false) {
e.Error = "Boolean value must be true.";
}
// Checks for integer parameters and ensures they are greater than 42.
else if (e.ChangedParameterModel.Type == typeof(int) && Int32.Parse(e.ChangedParameterModel.Value.ToString()) <= 42) {
e.Error = "The value must be greater than 42.";
}
// Checks for date range parameters and ensures the start date is within 2024.
else if (e.ChangedParameterModel.IsRangeParameter) {
Range<DateTime> dateRange = (Range<DateTime>)e.ChangedParameterModel.Value;
if (dateRange.Start < new DateTime(2024, 1, 1) || dateRange.Start > new DateTime(2024, 12, 31)) {
e.Error = "The start date must be in 2024.";
}
}
};
if (reportViewer.ParametersModel != null) {
reportViewer.ParametersModel.Validate += OnValidateParameters;
}
await reportViewer.OpenReportAsync(Report);
}
}
}
The following image shows validation output in the parameter panel:
#Validate Parameter Values at Report Level
To implement parameter validation at the report’s level, handle the ParametersRequestValueChanged event. Use the ChangedParameterInfo property to access information about the changed parameter and the ErrorText property to specify the error message. The message is displayed below the corresponding parameter editor if validation fails.
The following code snippet applies a number of validation rules to report parameters:
- Multi-value parameters require at least one value
- String parameters cannot be empty
- Boolean parameters must be true
- Integer parameters must be greater than 42
- The start date of date range parameters must fall within the year 2024
@page "/reportviewer/"
@using DevExpress.Blazor.Reporting
@using DevExpress.XtraReports.Parameters
@using DxBlazorApplication6.PredefinedReports
<link href="_content/DevExpress.Blazor.Themes/blazing-berry.bs5.css" rel="stylesheet" />
<link href="_content/DevExpress.Blazor.Reporting.Viewer/css/dx-blazor-reporting-components.bs5.css" rel="stylesheet" />
<DxReportViewer @ref="reportViewer" Report="Report" RootCssClasses="w-100 h-100" />
@code {
DxReportViewer reportViewer;
TestReport Report { get; set; }
protected override async Task OnAfterRenderAsync(bool firstRender) {
if (firstRender) {
Report = new TestReport();
EventHandler<ParametersRequestValueChangedEventArgs> OnParametersRequestValueChanged = (sender, e) => {
// Checks for multi-value parameters and ensures at least one value is selected.
if (e.ChangedParameterInfo.Parameter.MultiValue) {
var selectedValues = e.ChangedParameterInfo.Value as string[];
if (selectedValues == null || selectedValues.Length == 0)
e.ErrorText = "Multi-value parameters require at least one string value.";
}
// Checks for string parameters and ensures they are not empty.
else if (e.ChangedParameterInfo.Parameter.Type == typeof(String) && string.IsNullOrEmpty(e.ChangedParameterInfo.Value.ToString())) {
e.ErrorText = "String parameters do not allow empty values.";
}
// Checks for Boolean parameters and ensures they are true.
else if (e.ChangedParameterInfo.Parameter.Type == typeof(bool) && (bool)e.ChangedParameterInfo.Value == false) {
e.ErrorText = "Boolean value must be true.";
}
// Checks for integer parameters and ensures they are greater than 42.
else if (e.ChangedParameterInfo.Parameter.Type == typeof(int) && Int32.Parse(e.ChangedParameterInfo.Value.ToString()) <= 42) {
e.ErrorText = "The value must be greater than 42.";
}
// Checks for date range parameters and ensures the start date is within 2024.
else if ((e.ChangedParameterInfo.Parameter.ValueSourceSettings as RangeParametersSettings) != null) {
Range<DateTime> dateRange = (Range<DateTime>)e.ChangedParameterInfo.Value;
if (dateRange.Start < new DateTime(2024, 1, 1) || dateRange.Start > new DateTime(2024, 12, 31)) {
e.ErrorText = "The start date must be in 2024.";
}
}
};
Report.ParametersRequestValueChanged += OnParametersRequestValueChanged;
await reportViewer.OpenReportAsync(Report);
}
}
}
The following image shows validation output in the parameter panel: