Aller au contenu principal

LgDateBox

LgDateBox<TValue> permet de saisir ou de sélectionner un jour via un champ texte doublé d'un calendrier (datepicker). Il est la base de la famille des champs date : LgMonthBox (mois), LgWeekBox (semaine) et, pour un fonctionnement voisin, LgYearBox (année).

<LgDateBox Label="#OrderDate" @bind-Value="_model.OrderDate" />
  • Espace de noms : Lagoon.UI.Components
  • Hérite de : LgInputRenderBase<TValue> → LgInputBase<TValue> → LgAriaComponentBase → LgComponentBase
  • Package NuGet : Lagoon.UI

Le type lié TValue doit être DateOnly, DateTime ou DateTimeOffset (ou leur version nullable). Le suffixe du champ est réservé : le composant y place automatiquement l'icône calendrier (Suffix / SuffixType sont écrasés à l'initialisation).

Utilisation​

Démonstration​

Essayez ce composant dans le showcase Lagoon.

Saisie simple​

La liaison se fait avec @bind-Value. Le format d'affichage par défaut est le format de date court de la culture courante.

OrderEditPage.razor
<LgDateBox Label="#OrderDate" @bind-Value="_model.OrderDate" />
OrderEditPage.razor.cs
public partial class OrderEditPage : LgPage
{
// Modèle édité : la date est nullable pour autoriser un champ vide.
private readonly OrderVm _model = new();

private sealed class OrderVm
{
public DateTime? OrderDate { get; set; }
}
}

Bornes de sélection​

Min et Max désactivent les dates hors bornes dans le calendrier et invalident la saisie clavier correspondante.

BookingPage.razor
<LgDateBox Label="#BookingDate"
Min="_minDate"
Max="_maxDate"
@bind-Value="_model.BookingDate" />
BookingPage.razor.cs
public partial class BookingPage : LgPage
{
// Fenêtre de réservation autorisée : borne le calendrier et la saisie clavier.
private readonly DateTime _minDate = new(2026, 1, 1);
private readonly DateTime _maxDate = new(2026, 12, 31);

private readonly BookingVm _model = new();

private sealed class BookingVm
{
public DateOnly? BookingDate { get; set; }
}
}

Format d'affichage et saisie clavier​

DisplayFormat remplace le format de date court de la culture courante. KeyboardDisabled force le passage par le calendrier (le champ devient readonly côté saisie). AssumeNearbyYear contrôle l'expansion des années à deux chiffres : la saisie « 12/05/28 » devient 2028 tant que l'année reste à moins de AssumeNearbyYear ans dans le futur (20 par défaut ; une valeur inférieure à 1 désactive ce comportement).

ContractPage.razor
<LgDateBox Label="#SignatureDate"
DisplayFormat="dd/MM/yyyy"
AssumeNearbyYear="30"
@bind-Value="_model.SignatureDate" />

@* Sélection uniquement à la souris, dans le calendrier. *@
<LgDateBox Label="#EffectiveDate"
KeyboardDisabled="true"
@bind-Value="_model.EffectiveDate" />
ContractPage.razor.cs
public partial class ContractPage : LgPage
{
private readonly ContractVm _model = new();

private sealed class ContractVm
{
public DateTime? SignatureDate { get; set; }
public DateTime? EffectiveDate { get; set; }
}
}

Partie horaire des nouvelles valeurs​

Lorsque la valeur liée est un DateTime ou un DateTimeOffset vide, la nouvelle valeur créée à la sélection utilise DefaultTime (minuit par défaut), DefaultDateTimeKind (Unspecified par défaut) et, pour DateTimeOffset, DefaultTimeOffset (décalage du fuseau local par défaut). Si la valeur liée contient déjà une date, seule la partie date est remplacée : l'heure existante est conservée.

MeetingPage.razor
<LgDateBox Label="#MeetingDate"
DefaultTime="_defaultTime"
DefaultDateTimeKind="DateTimeKind.Local"
@bind-Value="_model.MeetingDate" />
MeetingPage.razor.cs
public partial class MeetingPage : LgPage
{
// Heure affectée aux nouvelles dates : évite de créer des réunions à minuit.
private readonly TimeOnly _defaultTime = new(9, 0);

private readonly MeetingVm _model = new();

private sealed class MeetingVm
{
public DateTime? MeetingDate { get; set; }
}
}

Réagir au changement de valeur​

OnChangingAsync est appelé avant l'affectation et permet d'annuler le changement (args.Cancel). OnChange est appelé après. OnFocus notifie la prise de focus (c'est aussi le moment où le calendrier se charge).

PeriodPage.razor
<LgDateBox Label="#StartDate"
OnChangingAsync="OnStartDateChangingAsync"
OnChange="OnStartDateChanged"
@bind-Value="_model.StartDate" />
PeriodPage.razor.cs
public partial class PeriodPage : LgPage
{
private readonly PeriodVm _model = new();

// Appelé avant le changement : positionnez args.Cancel pour refuser la nouvelle date
// (ex. cohérence avec une date de fin déjà saisie).
private Task OnStartDateChangingAsync(ChangingEventArgs<DateTime?> args)
{
if (args.NewValue > _model.EndDate)
{
args.Cancel = true;
ShowWarning("#StartAfterEnd");
}
return Task.CompletedTask;
}

// Appelé après le changement : utile pour recalculer des données dépendantes.
private void OnStartDateChanged(ChangeEventArgs args)
{
ShowInformation("#PeriodUpdated");
}

private sealed class PeriodVm
{
public DateTime? StartDate { get; set; }
public DateTime? EndDate { get; set; }
}
}

Champ obligatoire et bouton d'effacement​

Required force le caractère obligatoire (sinon il est déduit de l'attribut [Required] de la propriété liée). ResetButton affiche un bouton d'effacement ; sa valeur par défaut vient de la configuration de comportement de l'application.

DeadlinePage.razor
<LgEditForm Model="_model" OnValidSubmit="OnValidSubmitAsync">
<LgDateBox Label="#Deadline"
Required="true"
ResetButton="true"
@bind-Value="_model.Deadline" />
<LgButton Text="#Save" IsSubmit="true" />
</LgEditForm>
DeadlinePage.razor.cs
public partial class DeadlinePage : LgPage
{
private readonly DeadlineVm _model = new();

// Déclenché uniquement quand le formulaire est valide : la date est garantie renseignée.
private async Task OnValidSubmitAsync(EditContext editContext)
{
await Task.Delay(100);
ShowSuccess("#DeadlineSaved");
}

private sealed class DeadlineVm
{
public DateTime? Deadline { get; set; }
}
}

Premier jour de la semaine​

WeekStart change le premier jour affiché dans le calendrier (lundi par défaut).

PlanningPage.razor
<LgDateBox Label="#PlanningDate"
WeekStart="DayOfWeek.Sunday"
@bind-Value="_model.PlanningDate" />
PlanningPage.razor.cs
public partial class PlanningPage : LgPage
{
private readonly PlanningVm _model = new();

private sealed class PlanningVm
{
public DateOnly? PlanningDate { get; set; }
}
}

Propriétés​

Toutes les propriétés [Parameter] du composant, y compris celles héritées.

NomTypeDéfautDéclaré dansDescription
AssumeNearbyYearint20LgDateBoxNombre d'années dans le futur pendant lesquelles une année saisie sur deux chiffres est rattachée au siècle courant. Une valeur inférieure à 1 désactive ce comportement.
DefaultDateTimeKindDateTimeKindUnspecifiedLgDateBoxDateTimeKind utilisé pour créer un nouveau DateTime.
DefaultTimeTimeOnly?nullLgDateBoxHeure utilisée pour créer un nouveau DateTime ou DateTimeOffset (minuit si null).
DefaultTimeOffsetTimeSpan?nullLgDateBoxDécalage horaire utilisé pour créer un nouveau DateTimeOffset (décalage du fuseau local si null).
DisplayFormatstringnullLgDateBoxFormat d'affichage de la date (format de date court de la culture courante si null).
KeyboardDisabledboolfalseLgDateBoxInterdit la modification au clavier : la valeur ne peut être choisie que dans le calendrier.
MaxDateTime?nullLgDateBoxDate la plus tardive sélectionnable ; les dates ultérieures sont désactivées.
MinDateTime?nullLgDateBoxDate la plus ancienne sélectionnable ; les dates antérieures sont désactivées.
OnChangeDisabledboolfalseLgDateBoxDésactive l'événement onchange DOM au profit de oninput (utilisé pour éviter des erreurs quand le contrôle est retiré du rendu).
OnChangingAsyncFunc<ChangingEventArgs<TValue>, Task>nullLgDateBoxCallback appelé avant le changement de valeur ; le changement peut y être annulé.
OnFocusEventCallback<FocusEventArgs>—LgDateBoxCallback appelé à la prise de focus.
PlaceholderstringnullLgDateBoxTexte indicatif affiché quand le champ est vide.
WeekStartDayOfWeekMondayLgDateBoxPremier jour de la semaine dans le calendrier.
PrefixstringnullLgInputRenderBasePréfixe affiché dans le champ.
PrefixTypeInputLabelTypeTextLgInputRenderBaseNature du préfixe.
Suffixstring(icône calendrier)LgInputRenderBaseSuffixe affiché dans le champ. Réservé : le composant y place l'icône calendrier.
SuffixTypeInputLabelTypeIconNameLgInputRenderBaseNature du suffixe. Réservé par le composant.
AdditionalAttributesIReadOnlyDictionary<string, object>nullLgInputBaseAttributs HTML additionnels appliqués à l'élément rendu.
AutoFocusboolfalseLgInputBaseDonne le focus au champ lors du premier rendu.
ConfirmationMessagestringnullLgInputBaseMessage de confirmation affiché avant d'appliquer un changement de valeur.
ContainerIInputContainer<TValue>nullLgInputBaseUsage interne : rattache une cellule de GridView au champ.
CssClassstringnullLgInputBaseClasses CSS additionnelles.
DisabledboolfalseLgInputBaseDésactive le champ.
DisplayNamestringnullLgInputBaseNom du champ utilisé dans les messages d'erreur de saisie.
HideValidationMessageboolfalseLgInputBaseMasque le message de validation sous le champ.
LabelstringnullLgInputBaseLibellé du champ.
LabelContentRenderFragmentnullLgInputBaseContenu personnalisé de la zone de libellé.
OnChangeEventCallback<ChangeEventArgs>—LgInputBaseCallback appelé après le changement de valeur.
OnResetEventCallback<ChangeEventArgs>—LgInputBaseCallback appelé quand le champ est réinitialisé par le bouton d'effacement.
PolicyEditstringnullLgInputBasePolicy requise pour modifier le champ.
PolicyVisiblestringnullLgInputBasePolicy requise pour afficher le champ.
ReadOnlyboolfalseLgInputBaseAffiche le champ en lecture seule.
Requiredbool?nullLgInputBaseChamp obligatoire. Si null, déduit de l'attribut [Required] de la propriété liée.
ResetButtonbool?nullLgInputBaseAffiche le bouton d'effacement. Si null, la configuration de comportement de l'application s'applique.
ResetTextstringnullLgInputBaseTexte du bouton d'effacement.
ResetTextAriaLabelstringnullLgInputBaseLibellé accessible (aria-label) du bouton d'effacement.
TooltipstringnullLgInputBaseBulle d'aide.
TooltipIsHtmlboolfalseLgInputBaseIndique si le contenu du Tooltip est au format HTML (sinon texte brut).
ValueTValue—LgInputBaseValeur liée (@bind-Value).
ValueChangedEventCallback<TValue>—LgInputBaseCallback de mise à jour de la valeur liée.
ValueExpressionExpression<Func<TValue>>—LgInputBaseExpression identifiant la propriété liée.
AriaLabelstringnullLgAriaComponentBaseValeur de l'attribut aria-label.
AriaLabelledBystringnullLgAriaComponentBaseValeur de l'attribut aria-labelledby.
Paramètres en cascade

LgDateBox consomme aussi des paramètres fournis automatiquement par des composants ancêtres (vous n'avez pas à les définir) : ParentAuthorizeView (LgAuthorizeView) et le contexte d'édition d'un LgEditForm parent.

Événements​

ÉvénementTypeDescription
OnChangingAsyncFunc<ChangingEventArgs<TValue>, Task>Avant le changement de valeur ; args.Cancel = true annule le changement.
OnChangeEventCallback<ChangeEventArgs>Après le changement de valeur.
OnFocusEventCallback<FocusEventArgs>À la prise de focus du champ.
OnResetEventCallback<ChangeEventArgs>À la réinitialisation par le bouton d'effacement.

Énumérations associées​

InputLabelType​

Nature du contenu de Prefix / Suffix.

ValeurDescription
IconNameNom d'une icône de la bibliothèque.
TextTexte simple (valeur par défaut).

Bonnes pratiques / accessibilité​

  • Préférez DateOnly? quand seule la date compte : cela évite les surprises de partie horaire et de fuseau propres à DateTime / DateTimeOffset.
  • Ne définissez pas Suffix / SuffixType : ils sont écrasés par l'icône calendrier à l'initialisation du composant.
  • Pour un champ « mois », « semaine » ou « année », utilisez le composant spécialisé plutôt qu'un LgDateBox avec un format personnalisé.
Référence complète

Tous les paramètres (hérités compris) : Référence API — LgDateBox.

Composants liés​