@using System.Globalization
@using Radzen.Blazor
@using Radzen.Blazor.Spreadsheet
@using Radzen.Documents.Spreadsheet
@inherits SpreadsheetDialogBase
@if (ValidationType != DataValidationType.List && ValidationType != DataValidationType.Custom)
{
}
@if (ValidationType == DataValidationType.Custom)
{
}
else if (ValidationType == DataValidationType.List)
{
}
else if (Operator == DataValidationOperator.Between || Operator == DataValidationOperator.NotBetween)
{
@if (ValidationType == DataValidationType.Date)
{
}
else if (ValidationType == DataValidationType.Time)
{
}
else
{
}
}
else
{
@if (ValidationType == DataValidationType.Date)
{
}
else if (ValidationType == DataValidationType.Time)
{
}
else
{
}
}
@code {
#nullable enable
private DataValidationType ValidationType { get; set; } = DataValidationType.WholeNumber;
private DataValidationOperator Operator { get; set; } = DataValidationOperator.Between;
private string Formula1 { get; set; } = "";
private string Formula2 { get; set; } = "";
private bool AllowBlank { get; set; } = true;
private DataValidationErrorStyle ErrorStyle { get; set; } = DataValidationErrorStyle.Stop;
private string ErrorTitle { get; set; } = "";
private string ErrorMessage { get; set; } = "";
private bool ShowInputMessage { get; set; }
private string InputTitle { get; set; } = "";
private string InputMessage { get; set; } = "";
private DateTime? Formula1Date { get; set; }
private DateTime? Formula2Date { get; set; }
protected override void OnInitialized()
{
ErrorMessage = L(nameof(RadzenStrings.Spreadsheet_DefaultValidationError));
}
private List>? validationTypes;
private List> ValidationTypes => validationTypes ??=
[
new(L(nameof(RadzenStrings.Spreadsheet_ValidationWholeNumber)), DataValidationType.WholeNumber),
new(L(nameof(RadzenStrings.Spreadsheet_ValidationDecimal)), DataValidationType.Decimal),
new(L(nameof(RadzenStrings.Spreadsheet_ValidationList)), DataValidationType.List),
new(L(nameof(RadzenStrings.Spreadsheet_ValidationDate)), DataValidationType.Date),
new(L(nameof(RadzenStrings.Spreadsheet_ValidationTime)), DataValidationType.Time),
new(L(nameof(RadzenStrings.Spreadsheet_ValidationTextLength)), DataValidationType.TextLength),
new(L(nameof(RadzenStrings.Spreadsheet_ValidationCustom)), DataValidationType.Custom)
];
private List>? allOperators;
private List> AllOperators => allOperators ??=
[
new(L(nameof(RadzenStrings.Spreadsheet_OperatorBetween)), DataValidationOperator.Between),
new(L(nameof(RadzenStrings.Spreadsheet_OperatorNotBetween)), DataValidationOperator.NotBetween),
new(L(nameof(RadzenStrings.Spreadsheet_OperatorEqualTo)), DataValidationOperator.Equal),
new(L(nameof(RadzenStrings.Spreadsheet_OperatorNotEqualTo)), DataValidationOperator.NotEqual),
new(L(nameof(RadzenStrings.Spreadsheet_OperatorGreaterThan)), DataValidationOperator.GreaterThan),
new(L(nameof(RadzenStrings.Spreadsheet_OperatorLessThan)), DataValidationOperator.LessThan),
new(L(nameof(RadzenStrings.Spreadsheet_OperatorGreaterThanOrEqual)), DataValidationOperator.GreaterThanOrEqual),
new(L(nameof(RadzenStrings.Spreadsheet_OperatorLessThanOrEqual)), DataValidationOperator.LessThanOrEqual)
];
private List>? errorStyles;
private List> ErrorStyles => errorStyles ??=
[
new(L(nameof(RadzenStrings.Spreadsheet_ErrorStyleStop)), DataValidationErrorStyle.Stop),
new(L(nameof(RadzenStrings.Spreadsheet_ErrorStyleWarning)), DataValidationErrorStyle.Warning),
new(L(nameof(RadzenStrings.Spreadsheet_ErrorStyleInformation)), DataValidationErrorStyle.Information)
];
private List> Operators => AllOperators;
private void OnTypeChanged()
{
if (ValidationType == DataValidationType.List)
{
Operator = DataValidationOperator.Equal;
}
}
private void OnOk()
{
var formula1 = Formula1;
var formula2 = Formula2;
if (ValidationType == DataValidationType.Date)
{
if (Formula1Date.HasValue)
{
formula1 = Formula1Date.Value.ToString("yyyy-MM-dd", CultureInfo.InvariantCulture);
}
if (Formula2Date.HasValue)
{
formula2 = Formula2Date.Value.ToString("yyyy-MM-dd", CultureInfo.InvariantCulture);
}
}
else if (ValidationType == DataValidationType.Time)
{
if (Formula1Date.HasValue)
{
formula1 = (Formula1Date.Value.TimeOfDay.TotalDays).ToString(CultureInfo.InvariantCulture);
}
if (Formula2Date.HasValue)
{
formula2 = (Formula2Date.Value.TimeOfDay.TotalDays).ToString(CultureInfo.InvariantCulture);
}
}
else if (ValidationType is DataValidationType.WholeNumber or DataValidationType.Decimal or DataValidationType.TextLength)
{
// Bounds are typed in the workbook culture but stored as canonical invariant fragments.
formula1 = NormalizeNumericBound(formula1);
formula2 = NormalizeNumericBound(formula2);
}
else if (ValidationType == DataValidationType.Custom && formula1.StartsWith('='))
{
formula1 = FormulaLocalizer.ToInvariant(formula1, Culture);
}
var rule = new DataValidationRule
{
Type = ValidationType,
Operator = Operator,
Formula1 = formula1,
Formula2 = formula2,
AllowBlank = AllowBlank,
ErrorStyle = ErrorStyle,
ErrorTitle = string.IsNullOrEmpty(ErrorTitle) ? null : ErrorTitle,
Error = string.IsNullOrEmpty(ErrorMessage) ? L(nameof(RadzenStrings.Spreadsheet_DefaultValidationError)) : ErrorMessage,
ShowErrorMessage = true,
ShowInputMessage = ShowInputMessage,
InputTitle = string.IsNullOrEmpty(InputTitle) ? null : InputTitle,
InputMessage = string.IsNullOrEmpty(InputMessage) ? null : InputMessage
};
DialogService.Close(rule);
}
private string NormalizeNumericBound(string value)
{
if (string.IsNullOrEmpty(value) || value.StartsWith('='))
{
return value;
}
return ToInvariantNumber(value);
}
private sealed class DropDownItem(string name, T value)
{
public string Name { get; } = name;
public T Value { get; } = value;
}
}