Is there any way to add a fill mask to the date fields (DatePicker)?

Example: when typing the date 09/12/2023, the user would not need to enter the slashes (/) manually, it would be filled in automatically.

Such feature is not supported at the moment.

I understood. One solution would be to transform the current property I use to string and use the Mask component, right.

Did you manage to do this? I am trying to create a function to adjust this, but the value does not come as a string.

@rendermode InteractiveServer

<RadzenDatePicker @ref=testPicker @bind-Value=@Value DateFormat="dd/MM/yyyy" ShowCalendarWeek @onfocusout=ValidateDate />

@code {
public RadzenDatePicker testPicker { get; set; }
[Parameter] public DateTime? Date { get; set; }
[Parameter] public EventCallback<DateTime?> DateChanged { get; set; }

public string Value { get; set; } = string.Empty;

private void ValidateDate()
{
    var pickerValue = testPicker.Value;
    var dateString = Value;

    var currentDay = DateTime.Now.Day;
    var currentMonth = DateTime.Now.Month;
    var currentYear = DateTime.Now.Year;

    var day = currentDay.ToString();
    var month = currentMonth.ToString();
    var year = currentYear.ToString();

    if (dateString.Length >= 2)
    {
        day = dateString.Substring(0, 2);
    }

    if (dateString.Length >= 4)
    {
        month = dateString.Substring(2, 4);
    }

    if (dateString.Length >= 8)
    {
        year = dateString.Substring(4, 8);
    }

    if (dateString.Length == 2)
    {
        dateString = $"{day}/{currentMonth}/{currentYear}";
    }
    else if (dateString.Length <= 4)
    {
        dateString = $"{day}/{month}/{currentYear}";
    }
    else if (dateString.Length == 8)
    {
        dateString = $"{day}/{month}/{year}";
    }

    Date = ConverterHelper.ToDate(dateString);
}

}

I managed with the following code:

@using System.Globalization

@rendermode InteractiveServer

<RadzenDatePicker TValue=DateTime Value=@Valor @onkeypress=@(args => VerificaTeclaEnterTab(args.Key)) @onfocusout="ValidaData" @oninput=@(args => HandleInput(args.Value.ToString())) DateFormat="dd/MM/yyyy" ShowCalendarWeek />
@* @onkeypress=@(args => VerificaTeclaEnterTab(args.Key)) @oninput=@(args => HandleInput(args.Value.ToString())) *@
@code {
[Parameter] public DateTime? Data { get; set; }
[Parameter] public EventCallback<DateTime?> DataChanged { get; set; }

public void LimpaCampos()
{
    Valor = null;
    Data = Valor;
    DataChanged.InvokeAsync(Data);
}

private DateTime? Valor { get; set; }

private string ValorAuxiliar { get; set; }


private void VerificaTeclaEnterTab(string key)
{
    if (key.Equals("enter", StringComparison.OrdinalIgnoreCase))
        ValidaData();
}

protected override void OnParametersSet()
{
    base.OnParametersSet();
}

private void HandleInput(string valor)
{
    ValorAuxiliar = valor;
}

private void ValidaData()
{
    if (string.IsNullOrEmpty(ValorAuxiliar))
        return;

    if (DateTime.TryParseExact(ValorAuxiliar, "dd/MM/yyyy", new CultureInfo("pt-BR"), DateTimeStyles.None, out var dateValue))
        return;

    var diaAtual = DateTime.Now.Day; 
    var mesAtual = DateTime.Now.Month;
    var anoAtual = DateTime.Now.Year;

    var dia = diaAtual.ToString();
    var mes = mesAtual.ToString();
    var ano = anoAtual.ToString();

    if (ValorAuxiliar.Length >= 2)
    {
        dia = ValorAuxiliar.Substring(0, 2);
    }

    if (ValorAuxiliar.Length >= 4)
    {
        mes = ValorAuxiliar.Substring(2, 2);
    }

    if (ValorAuxiliar.Length >= 8)
    {
        ano = ValorAuxiliar.Substring(4, 4);
    }

    ValorAuxiliar = $"{dia}/{mes}/{ano}";

    Valor = ConversorHelper.Date(ValorAuxiliar);
    Data = Valor;
    DataChanged.InvokeAsync(Data);
}

}

1 Like