@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; } }