Validation dans Wisej.NET
Toute application de gestion vaut ce que valent les données que l’on y saisit. Ce cours pour débutants vous apprend à valider cette saisie à la manière de Wisej.NET : repérer les erreurs pendant que l’utilisateur modifie, les expliquer en termes simples et garantir que des données incorrectes ne puissent jamais être enregistrées — le tout autour du projet ValidationClinic, un formulaire d’enregistrement client et une grille de contacts modifiable. Sept modules partent du cycle de vie de la validation — Validating, Validated, e.Cancel, AutoValidate et ValidateChildren — puis passent au retour visuel avec ErrorProvider et aux récapitulatifs visibles, à l’extender Validation et à ses règles intégrées, et à la validation personnalisée avec des services réutilisables et des classes ValidationRule. Vous validerez ensuite le modèle lui-même avec la liaison de données, DataAnnotations et IDataErrorInfo, validerez les cellules et les lignes de la DataGridView, et terminerez par un pipeline d’enregistrement complet et un error provider personnalisé dans le projet de synthèse. Il s’adresse aux développeurs qui connaissent les bases de C# et commencent à créer des formulaires Wisej.NET.
Validez clairement formulaires, grilles et éditeurs liés aux données — événements, ErrorProvider, règles de validation, erreurs du modèle et cellules de grille.
- Niveau: Beginner
- Durée: 8 h
- Modules: 7
Programme
Module 1: Fondamentaux de la validation dans Wisej.NET
Module 1 de Validation dans Wisej.NET — créez des formulaires, des grilles et des éditeurs liés aux données qui valident la saisie clairement et n’enregistrent jamais de données incorrectes. Lisez le guide de la leçon et le guide du lab / de l’examen, regardez la vidéo pas à pas sur les fondamentaux de la validation, réussissez la vérification des connaissances, puis réalisez le lab pratique dans ValidationClinic.
- LectureGuide de la leçon · 14 min
Ce que signifie la validation dans une interface Wisej.NET côté serveur : le cycle de vie de Validating et Validated, le rejet d’une saisie invalide avec e.Cancel, le comportement du focus selon AutoValidate, CausesValidation sur les boutons Cancel et ValidateChildren comme garde-fou de Save. Ce que cela signifie pour un développeur qui connaît les bases de C# et débute dans le développement de formulaires Wisej.NET — et comment aborder ce module.
- LectureGuide du lab / de l’examen · 10 min
Ce que vous allez construire dans le lab pratique, l’approche suggérée et les livrables attendus.
- Leçon vidéoQuand la validation s’exécute, et ce qui bloque un enregistrement incorrect · 14 min
Quand la validation s’exécute, et ce qui bloque un enregistrement incorrect — une vidéo pas à pas guidée du Module 1, construite étape par étape dans ValidationClinic. Elle se lance directement ici, dans le lecteur.
Transcription de la narration
Créez le formulaire d'admission ValidationClinic autour de deux opportunités de détecter les erreurs : lorsque l'utilisateur quitte un champ et lorsqu'il enregistre. Dans Wisej.NET, ces vérifications fonctionnent ensemble afin qu'un champ intact ne puisse échapper à la validation.
Exécutez des vérifications rapides dans l’événement Validating, avant que l’utilisateur ne continue. Le navigateur signale le changement de focus, mais votre gestionnaire C sharp s'exécute sur le serveur. Garder ce gestionnaire court évite de rendre la navigation ordinaire lente.
Utilisez Validation pour décider si la valeur est acceptable. Annulez l'événement et expliquez le problème lorsque ce n'est pas le cas. Validé suit uniquement une vérification réussie, ce qui en fait l'endroit approprié pour un nettoyage tel que la suppression d'un nom accepté.
Définissez le comportement AutoValidate du formulaire dans son constructeur. Dans chaque gestionnaire, SetError explique une valeur rejetée et e.Cancel la rejette. Effacez le message après correction afin que l'interface reflète la valeur actuelle plutôt qu'une erreur antérieure.
Restez concentré sur un champ invalide lorsque l’utilisateur doit le corriger. Donnez à Cancel une voie d'évacuation distincte en définissant CausesValidation sur false. Dans le cas contraire, la validation pourrait empêcher quelqu'un d'abandonner un formulaire incomplet.
Avant d'écrire au client, appelez ValidateChildren depuis Save. Cela vérifie également les champs que l'utilisateur n'a jamais visités. Si un gestionnaire annule la validation, arrêtez la sauvegarde ; seules les valeurs acceptées doivent atteindre l'opération d'écriture et sa gestion des exceptions.
Regardez le nom vide rester concentré pendant que l'icône d'erreur explique pourquoi. Après correction, le nom accepté est tronqué. L'e-mail mal formé est rejeté indépendamment, tandis qu'Annuler ferme toujours le formulaire sans nécessiter la correction des deux champs.
Testez Enregistrer avant de toucher le champ e-mail. ValidateChildren détecte cette entrée manquante et empêche l'écriture même si aucun changement de focus ne s'y est produit. Corrigez l'adresse et enregistrez à nouveau pour confirmer que l'entrée valide suit le chemin réussi.
Pour cet atelier, connectez la validation des champs, le nettoyage des valeurs réussies et la vérification finale de l'enregistrement dans un seul formulaire d'admission. Testez également Annuler avec une entrée non valide. Votre note de laboratoire doit expliquer comment ces chemins empêchent les mauvaises données sans piéger l'utilisateur.
- LectureExercice de code avec l’IA · 20 min
Construisez l’exemple ValidationClinic de ce module avec ChatGPT ou Claude à partir d’un prompt prêt à l’emploi qui oriente le modèle vers la spécification du module, puis relisez, exécutez et étendez ce qu’il vous renvoie — y compris en le comparant à notre propre solution de référence sur GitHub.
- Quiz de connaissancesVérification des connaissances — Module 1 · 10 min · Note de réussite 80%
- Lab pratiqueLab — Validating, Validated et un enregistrement protégé · 45 min
Objectif: Créez le formulaire d’inscription client de ValidationClinic avec les TextBox txtName et txtEmail, un bouton Save et un bouton Cancel. Attachez des gestionnaires Validating qui définissent e.Cancel = true et un message ErrorProvider quand le nom est vide ou que l’adresse e-mail ne contient pas de @, effacent le message quand la valeur est valide, et supprimez les espaces du nom dans son gestionnaire Validated. Définissez le mode AutoValidate du formulaire, assurez-vous que Cancel ne déclenche pas de validation pour que l’utilisateur puisse toujours sortir, et appelez ValidateChildren() au début de btnSave_Click pour que Save s’arrête dès qu’un champ est invalide. Terminez par une courte note de lab qui explique le comportement du focus que vous avez choisi. Livrables : Formulaire d’inscription client avec txtName et txtEmail, un bouton Save et un bouton Cancel ; Gestionnaires Validating qui définissent e.Cancel = true et un message d’erreur pour un nom vide et une adresse e-mail invalide ; Gestionnaire Validated qui supprime les espaces du nom accepté ; Gestionnaire de Save qui appelle ValidateChildren() et s’arrête quand la méthode renvoie false ; Note de lab indiquant le mode AutoValidate choisi et pourquoi Cancel fonctionne toujours sur un formulaire invalide.
Module 2: Validation programmatique et retour avec ErrorProvider
Module 2 de Validation dans Wisej.NET — créez des formulaires, des grilles et des éditeurs liés aux données qui valident la saisie clairement et n’enregistrent jamais de données incorrectes. Lisez le guide de la leçon et le guide du lab / de l’examen, regardez la vidéo pas à pas sur le retour avec ErrorProvider, réussissez la vérification des connaissances, puis réalisez le lab pratique dans ValidationClinic.
- LectureGuide de la leçon · 14 min
Un seul ErrorProvider par formulaire, SetError et l’effacement des erreurs contrôle par contrôle, InvalidMessage pour un retour local simple, un petit type de résultat FieldValidation qui garde les règles hors de l’interface, et un récapitulatif de validation visible pour qu’aucune erreur ne dépende du survol d’une icône. Ce que cela signifie pour un développeur qui connaît les bases de C# et débute dans le développement de formulaires Wisej.NET — et comment aborder ce module.
- LectureGuide du lab / de l’examen · 10 min
Ce que vous allez construire dans le lab pratique, l’approche suggérée et les livrables attendus.
- Leçon vidéoDes icônes, des messages et un récapitulatif impossible à manquer · 14 min
Des icônes, des messages et un récapitulatif impossible à manquer — une vidéo pas à pas guidée du Module 2, construite étape par étape dans ValidationClinic. Elle se lance directement ici, dans le lecteur.
Transcription de la narration
Donnez au formulaire de contact un feedback qui reste utile après la première erreur. Un ErrorProvider gère les icônes, des assistants réutilisables décident quelles valeurs ne sont pas valides et un résumé visible permet aux utilisateurs d'examiner ensemble chaque problème.
Séparez la vérification d’une valeur de l’affichage de son erreur. Les gestionnaires de champs indépendants peuvent laisser des icônes obsolètes ou effacer des messages sans rapport. Une approche partagée permet à chaque correction d'affecter le domaine concerné tout en préservant les problèmes qui nécessitent encore une attention particulière.
Choisissez comment chaque message parvient à l'utilisateur. SetError ajoute une icône à côté d'une entrée, tandis que InvalidMessage fournit la propre info-bulle du contrôle. Le résumé fournit un texte lisible pour l'ensemble du formulaire, de sorte que les erreurs ne sont pas détectables uniquement en survolant le formulaire.
Configurez un seul ErrorProvider pour le formulaire, avec des icônes stables placées à droite. Laissez ValidateEmail renvoyer un résultat FieldValidation au lieu de modifier les contrôles. Cette séparation maintient la règle réutilisable et laisse la présentation au formulaire.
Appliquer des processus à chaque résultat, y compris les résultats réussis. Un message vide supprime l’ancienne icône de ce champ ; les résultats invalides remplissent également le résumé. Renvoyer si tous les résultats ont été transmis donne à Save une décision claire avant que des données ne soient écrites.
Faites correspondre les commentaires au problème. Placez une correction de champ à côté de son entrée, expliquez une règle métier dans le résumé de sauvegarde et donnez à une panne système son propre message convivial. Les utilisateurs doivent comprendre quelle action est disponible pour eux.
Enregistrez le formulaire avec les trois champs de contact invalides. Comparez les icônes locales avec le résumé : les deux doivent décrire les mêmes problèmes restants. L'info-bulle du code client montre le chemin d'affichage alternatif sans remplacer l'explication à l'échelle du formulaire.
Corrigez uniquement l'e-mail et laissez ce champ. Son icône et son récapitulatif disparaissent, mais le nom et les messages téléphoniques restent. Cela démontre pourquoi les résultats individuels doivent effacer les erreurs individuelles plutôt que l'ensemble du fournisseur.
Créez les assistants, le ErrorProvider partagé et la méthode Apply comme un seul chemin de rétroaction. Vérifiez que la correction d'un champ préserve les autres erreurs. Comparez le code client InvalidMessage avec les icônes et le résumé pour expliquer quand chaque présentation est utile.
- LectureExercice de code avec l’IA · 20 min
Construisez l’exemple ValidationClinic de ce module avec ChatGPT ou Claude à partir d’un prompt prêt à l’emploi qui oriente le modèle vers la spécification du module, puis relisez, exécutez et étendez ce qu’il vous renvoie — y compris en le comparant à notre propre solution de référence sur GitHub.
- Quiz de connaissancesVérification des connaissances — Module 2 · 10 min · Note de réussite 80%
- Lab pratiqueLab — ErrorProvider, utilitaires et récapitulatif de validation · 45 min
Objectif: Transformez le formulaire de contact de ValidationClinic en formulaire à validation programmatique. Créez un seul ErrorProvider pour le formulaire avec ContainerControl défini, NeverBlink et une icône alignée à droite, écrivez un record FieldValidation ainsi que des utilitaires ValidateName, ValidateEmail et ValidatePhone qui renvoient un message au lieu de toucher à l’interface, et une méthode Apply qui appelle SetError pour chaque résultat et remplit un validationSummaryLabel visible uniquement tant qu’il existe des erreurs. Utilisez InvalidMessage sur le champ du code client pour comparer les deux styles de retour, et assurez-vous que corriger un champ n’efface que l’erreur de ce champ. Livrables : ErrorProvider au niveau du formulaire avec ContainerControl, BlinkStyle et alignement des icônes configurés ; Record FieldValidation et méthodes utilitaires ValidateName, ValidateEmail et ValidatePhone ; Méthode Apply qui définit ou efface l’erreur de chaque contrôle et renvoie si tous les champs sont valides ; validationSummaryLabel listant tous les problèmes en cours et masqué quand il n’y en a aucun ; Un champ utilisant InvalidMessage au lieu d’ErrorProvider, avec une note comparant les deux.
Module 3: Règles de validation intégrées et extender Validation
Module 3 de Validation dans Wisej.NET — créez des formulaires, des grilles et des éditeurs liés aux données qui valident la saisie clairement et n’enregistrent jamais de données incorrectes. Lisez le guide de la leçon et le guide du lab / de l’examen, regardez la vidéo pas à pas sur l’extender Validation, réussissez la vérification des connaissances, puis réalisez le lab pratique dans ValidationClinic.
- LectureGuide de la leçon · 14 min
L’extender Validation de Wisej.NET : la propriété étendue ValidationRules au moment de la conception, SetValidationRules à l’exécution, les règles Required, Email, Integer, Decimal, Currency, Telephone et Regex, l’ordre des règles qui s’arrête au premier échec, et les cibles d’affichage ErrorProvider ou Label. Ce que cela signifie pour un développeur qui connaît les bases de C# et débute dans le développement de formulaires Wisej.NET — et comment aborder ce module.
- LectureGuide du lab / de l’examen · 10 min
Ce que vous allez construire dans le lab pratique, l’approche suggérée et les livrables attendus.
- Leçon vidéoDéclarer les règles une fois et laisser l’extender les exécuter · 14 min
Déclarer les règles une fois et laisser l’extender les exécuter — une vidéo pas à pas guidée du Module 3, construite étape par étape dans ValidationClinic. Elle se lance directement ici, dans le lecteur.
Transcription de la narration
Déplacez les règles de champ répétées dans l'extension de validation. Dans Wisej.NET, la description des exigences de chaque champ permet au répéteur d'effectuer des vérifications cohérentes pour ValidationClinic, tandis que le formulaire reste chargé de présenter des commentaires utiles à l'utilisateur.
Le prolongateur se connecte à Validating et Validated sur les contrôles. Au lieu de répéter la même vérification de valeur vide dans plusieurs gestionnaires, attachez des métadonnées de règle à chaque champ. Le flux des événements reste familier tandis que les définitions deviennent plus faciles à partager.
Choisissez une règle intégrée pour le type de valeur que vous acceptez, comme un e-mail, un nombre entier, une devise ou un téléphone. Utilisez une expression régulière lorsque le modèle requis en a besoin. Attribuez à chaque règle un InvalidMessage qui explique la correction dans la langue de l'utilisateur.
Ajoutez une validation dans le concepteur, puis ouvrez la collection ValidationRules d’un contrôle. Mettez Obligatoire avant l'E-mail. L'ordre de collecte est également un ordre d'exécution, donc l'organisation de ces entrées détermine quelle explication l'utilisateur reçoit en premier.
Un échec de règle arrête les règles restantes et annule la validation. C'est pourquoi un e-mail vide devrait échouer. Obligatoire en premier : demander une adresse manquante est plus utile que signaler un problème de format avant qu'une adresse n'existe.
La configuration du runtime suit le même modèle de règles. Créez les tableaux une fois dans ClinicRules, sélectionnez la cible d'affichage, puis attribuez chaque champ via SetValidationRules. Le fait de conserver les définitions ensemble évite des copies légèrement différentes de la même règle d’un formulaire à l’autre.
Comparez une adresse vide, une adresse mal formée et une adresse valide. Chaque tentative ne doit produire que la première erreur applicable. Lorsque la valeur devient valide, l'icône et l'entrée récapitulative s'effacent, confirmant que la présentation suit le dernier résultat de validation.
Les règles peuvent envoyer un retour au contrôle, à un ErrorProvider ou à une étiquette. Choisissez délibérément la cible, puis mettez à jour le résumé à partir des propres événements du répéteur. Cela permet de synchroniser le résumé avec les contrôles réellement exécutés.
Remplacez les gestionnaires répétés par des définitions ClinicRules partagées. Gardez d'abord Required et connectez le résumé aux événements du prolongateur. Votre test doit montrer que les valeurs vides, mal formées et corrigées produisent le message approprié sans conserver de commentaires obsolètes.
- LectureExercice de code avec l’IA · 20 min
Construisez l’exemple ValidationClinic de ce module avec ChatGPT ou Claude à partir d’un prompt prêt à l’emploi qui oriente le modèle vers la spécification du module, puis relisez, exécutez et étendez ce qu’il vous renvoie — y compris en le comparant à notre propre solution de référence sur GitHub.
- Quiz de connaissancesVérification des connaissances — Module 3 · 10 min · Note de réussite 80%
- Lab pratiqueLab — Règles, ordre des règles et cibles d’affichage · 45 min
Objectif: Remplacez les gestionnaires de champ écrits à la main dans ValidationClinic par l’extender Validation. Ajoutez un composant Validation et un ErrorProvider au formulaire d’inscription, définissez ContainerControl et validation.ErrorProvider, puis appelez SetValidationRules dans une méthode ConfigureValidationRules : Required puis Email sur txtEmail, Required puis Integer sur txtAge, Required puis Telephone sur txtPhone, Currency sur txtCreditLimit et une règle Regex pour le code client. Placez Required en premier partout pour que le message le plus utile l’emporte, abonnez-vous à l’événement Validating de l’extender pour rafraîchir le récapitulatif, et déplacez les tableaux de règles dans un petit utilitaire réutilisable pour qu’un autre formulaire puisse appliquer la même configuration. Livrables : Composant Validation relié au formulaire et à une cible d’affichage ErrorProvider ; Méthode ConfigureValidationRules appelant SetValidationRules pour l’e-mail, l’âge, le téléphone, la limite de crédit et le code client ; Règle Required placée en premier sur chaque champ obligatoire, avec un texte InvalidMessage en langage simple ; Gestionnaire Validating de l’extender qui garde le récapitulatif de validation synchronisé avec les règles ; Utilitaire de configuration des règles réutilisable qu’un second formulaire peut appeler.
Module 4: Validation personnalisée : méthodes, services et classes ValidationRule
Module 4 de Validation dans Wisej.NET — créez des formulaires, des grilles et des éditeurs liés aux données qui valident la saisie clairement et n’enregistrent jamais de données incorrectes. Lisez le guide de la leçon et le guide du lab / de l’examen, regardez la vidéo pas à pas sur la validation personnalisée, réussissez la vérification des connaissances, puis réalisez le lab pratique dans ValidationClinic.
- LectureGuide de la leçon · 14 min
Les règles métier que les règles intégrées ne savent pas exprimer : des méthodes de validation qui renvoient une chaîne, un service ContactValidator testable sans l’interface, une classe ValidationRule personnalisée avec OnValidating, OnValidated et OnControlCreated, et des règles inter-champs qui signalent chaque contrôle concerné. Ce que cela signifie pour un développeur qui connaît les bases de C# et débute dans le développement de formulaires Wisej.NET — et comment aborder ce module.
- LectureGuide du lab / de l’examen · 10 min
Ce que vous allez construire dans le lab pratique, l’approche suggérée et les livrables attendus.
- Leçon vidéoDes vérifications ponctuelles aux règles réutilisables et testables · 14 min
Des vérifications ponctuelles aux règles réutilisables et testables — une vidéo pas à pas guidée du Module 4, construite étape par étape dans ValidationClinic. Elle se lance directement ici, dans le lecteur.
Transcription de la narration
Module quatre. Validation personnalisée dans Wisej.NET. Un formulaire peut accepter des valeurs correctement formatées qui enfreignent toujours les règles métier. Réparons ça.
Les règles intégrées vérifient la forme d'une valeur. Mais une date valide peut toujours être postérieure à une date de fin, et une date de naissance valide peut appartenir à quelqu'un de trop jeune. Ce sont des règles commerciales. Lorsque vous comparez des champs, calculez un âge ou vérifiez des valeurs ensemble, écrivez une règle de validation personnalisée.
La validation personnalisée comporte trois foyers. Tout d’abord, une méthode qui renvoie un message d’erreur. Deuxièmement, un service qui renvoie les enregistrements ValidationMessage. Troisièmement, une classe dérivée de ValidationRule exécutée par l'extension de validation. Choisissez la maison qui correspond à la responsabilité de votre règle.
ValidateStartEndDates renvoie une chaîne vide lorsque les dates sont valides, ou un message d'erreur lorsqu'elles ne le sont pas. Appliquez ce même message aux deux sélecteurs de date. Le service ContactValidator ne dépend pas des contrôles. Il valide le modèle afin que vous puissiez tester la logique métier sans l'interface utilisateur.
MinimumAgeValidationRule dérive de ValidationRule. Sa méthode OnValidating renvoie vrai ou faux. Attachez la règle au sélecteur de date de naissance avec SetValidationRules. ApplyModelValidation connecte les résultats du service à l'écran. Il mappe les noms de champs aux contrôles, de sorte que chaque message apparaît là où l'utilisateur peut résoudre le problème.
Le gestionnaire Save exécute la validation dans l’ordre. Tout d’abord, vérifiez les règles du champ. Exécutez ensuite le service de validation et la règle de date. Revenez tôt si une couche échoue. Appelez le référentiel uniquement après chaque vérification réussie. La base de données ne doit jamais recevoir de données que votre validation a déjà rejetées.
Essayez maintenant d'enregistrer avec la date de début après la date de fin. Les deux sélecteurs affichent la même erreur et le résumé affiche un seul message.
Corrigez la date de fin. Les deux erreurs disparaissent ensemble. Étant donné que cette règle compare deux valeurs, les deux contrôles partagent le feedback.
Entrez une date de naissance à partir de vingt-onze heures. La règle de l'âge minimum le rejette dès que l'utilisateur quitte le préparateur.
Corrigez la date de naissance et l’erreur disparaît. Save exécute désormais chaque couche de validation avec succès, puis stocke le contact exactement une fois.
Pour le quatrième laboratoire, implémentez la vérification de date, le service de validation, le mappage des messages et la règle d'âge minimum.
Connectez-les dans un gestionnaire de sauvegarde qui n'enregistre jamais les données non valides.
- LectureExercice de code avec l’IA · 20 min
Construisez l’exemple ValidationClinic de ce module avec ChatGPT ou Claude à partir d’un prompt prêt à l’emploi qui oriente le modèle vers la spécification du module, puis relisez, exécutez et étendez ce qu’il vous renvoie — y compris en le comparant à notre propre solution de référence sur GitHub.
- Quiz de connaissancesVérification des connaissances — Module 4 · 10 min · Note de réussite 80%
- Lab pratiqueLab — Service de validation et ValidationRule personnalisée · 45 min
Objectif: Ajoutez une validation personnalisée à ValidationClinic en trois étapes. Écrivez ValidateStartEndDates comme une méthode qui renvoie une chaîne vide quand les données sont valides et un message quand la date de début est postérieure à la date de fin, et définissez ce message à la fois sur dtpStart et sur dtpEnd. Déplacez les règles sur le nom, l’e-mail et la date de naissance dans un service ContactValidator qui renvoie une liste de records ValidationMessage, et associez chaque nom de champ à son contrôle dans ApplyModelValidation. Créez ensuite MinimumAgeValidationRule, dérivée de ValidationRule, avec une propriété MinimumAge, redéfinissez OnValidating pour calculer l’âge à partir du DateTimePicker, attachez-la à dtpBirthDate via l’extender Validation, et exécutez le service dans btnSave_Click avant tout enregistrement. Livrables : Méthode ValidateStartEndDates qui définit la même erreur sur les deux sélecteurs de date et les efface tous les deux une fois corrigés ; Service ContactValidator renvoyant des records ValidationMessage pour le nom, l’e-mail et la date de naissance ; Méthode ApplyModelValidation associant chaque nom de champ à son contrôle et au récapitulatif ; Classe MinimumAgeValidationRule redéfinissant OnValidating, attachée à dtpBirthDate ; Gestionnaire de Save qui exécute les règles de champ, puis le service de validation, et seulement ensuite enregistre.
Module 5: Validation liée aux données et erreurs du modèle
Module 5 de Validation dans Wisej.NET — créez des formulaires, des grilles et des éditeurs liés aux données qui valident la saisie clairement et n’enregistrent jamais de données incorrectes. Lisez le guide de la leçon et le guide du lab / de l’examen, regardez la vidéo pas à pas sur la validation liée aux données, réussissez la vérification des connaissances, puis réalisez le lab pratique dans ValidationClinic.
- LectureGuide de la leçon · 14 min
Valider le modèle, pas seulement les contrôles : BindingSource et EndEdit, les DataAnnotations exécutées avec Validator.TryValidateObject, l’association des MemberNames aux contrôles, IDataErrorInfo avec un ErrorProvider lié aux données, BindToDataAndErrors et l’ordre d’enregistrement sûr. Ce que cela signifie pour un développeur qui connaît les bases de C# et débute dans le développement de formulaires Wisej.NET — et comment aborder ce module.
- LectureGuide du lab / de l’examen · 10 min
Ce que vous allez construire dans le lab pratique, l’approche suggérée et les livrables attendus.
- Leçon vidéoLaisser le modèle dire ce qui est valide · 14 min
Laisser le modèle dire ce qui est valide — une vidéo pas à pas guidée du Module 5, construite étape par étape dans ValidationClinic. Elle se lance directement ici, dans le lecteur.
Transcription de la narration
Module cinq. Validation liée aux données dans Wisej.NET. Le formulaire d'admission modifie désormais un modèle de modification de contact. Ses règles de validation de base appartiennent aux données, donc les mêmes règles peuvent protéger le formulaire, la grille et d'autres moyens de modifier un contact.
Un gestionnaire de formulaire protège uniquement les modifications apportées via ce formulaire. Une grille, une importation ou un service peut mettre à jour le même contact sans exécuter ces gestionnaires. Mettez les règles de base sur le modèle, puis faites en sorte que chaque chemin de sauvegarde les exécute avant d'accepter les données.
Tout d’abord, terminez la modification en cours. La valeur encore en cours de saisie n'a peut-être pas encore atteint le modèle. Appelez End Edit sur la source de liaison du contact avant de valider. Sinon, le validateur pourrait vérifier une valeur plus ancienne même si l'utilisateur a déjà corrigé le champ.
Les annotations de données décrivent les règles, mais elles ne s'exécutent pas elles-mêmes. Essayez de valider l'objet, les applique et collecte les résultats. Définissez valider toutes les propriétés sur true. Sans cette option, seul Obligatoire est coché, donc un e-mail mal formé ou un âge hors plage pourrait passer.
Le validateur renvoie les noms de propriétés, pas les contrôles. Utilisez une carte de champ pour connecter chaque résultat à l’entrée correcte. Mettez le message à côté de cette entrée et dans le résumé. Si une propriété n'a pas de contrôle correspondant, conservez son message dans le résumé afin que l'erreur soit toujours visible.
Il existe une autre approche. Un modèle implémentant I Data Error Info répond aux questions de validation pour chaque propriété. Un fournisseur d'erreurs lié aux données lit ces réponses. Lors du changement de source au moment de l'exécution, Bind To Data And Errors définit la source et le membre ensemble, évitant ainsi une incompatibilité temporaire.
Essayez d'enregistrer le contact invalide. End Edit valide d’abord l’entrée actuelle dans le modèle. Les vérifications d'annotation rejettent le nom, l'adresse e-mail et l'âge. La carte de champ place chaque message à côté de son entrée et dans le résumé. Le chemin de sauvegarde s'arrête avant d'écrire quoi que ce soit.
Corrigez les valeurs et enregistrez à nouveau. Les contrôles sont désormais réussis et le contact est enregistré. Sur le modèle I Data Error Info, la suppression du nom ramène l’icône d’erreur via la liaison de données. Le formulaire n’a pas besoin d’appeler Set Error pour cette modification.
Pour le laboratoire cinq, liez l'éditeur au modèle, terminez les modifications avant de valider et mappez les résultats des annotations aux champs et au résumé. Connectez ensuite le modèle I Data Error Info via Bind To Data And Errors. Vérifiez que les données non valides n'atteignent jamais le référentiel.
- LectureExercice de code avec l’IA · 20 min
Construisez l’exemple ValidationClinic de ce module avec ChatGPT ou Claude à partir d’un prompt prêt à l’emploi qui oriente le modèle vers la spécification du module, puis relisez, exécutez et étendez ce qu’il vous renvoie — y compris en le comparant à notre propre solution de référence sur GitHub.
- Quiz de connaissancesVérification des connaissances — Module 5 · 10 min · Note de réussite 80%
- Lab pratiqueLab — DataAnnotations, IDataErrorInfo et EndEdit · 45 min
Objectif: Liez le formulaire d’inscription de ValidationClinic à un ContactEditModel via un contactBindingSource et ajoutez les annotations Required, StringLength, EmailAddress et Range à ses propriétés Name, Email et Age. Dans btnSave_Click, appelez d’abord contactBindingSource.EndEdit(), exécutez Validator.TryValidateObject avec validateAllProperties à true, et associez chaque nom de membre des ValidationResult à son contrôle via une table de correspondance des champs et le récapitulatif de validation. Implémentez ensuite IDataErrorInfo sur un second modèle, faites pointer l’ErrorProvider vers la binding source avec BindToDataAndErrors, et montrez les mêmes erreurs apparaître par liaison de données sans appel à SetError écrit à la main. Livrables : ContactEditModel avec DataAnnotations, lié au formulaire via un BindingSource ; Gestionnaire de Save qui appelle EndEdit avant d’exécuter Validator.TryValidateObject ; Table de correspondance des champs qui transforme les noms de membres des ValidationResult en erreurs de contrôle et en lignes du récapitulatif ; Modèle IDataErrorInfo dont les erreurs apparaissent via un ErrorProvider lié aux données ; Appel à BindToDataAndErrors utilisé quand la source de données du provider change à l’exécution.
Module 6: Validation des cellules et erreurs de ligne dans DataGridView
Module 6 de Validation dans Wisej.NET — créez des formulaires, des grilles et des éditeurs liés aux données qui valident la saisie clairement et n’enregistrent jamais de données incorrectes. Lisez le guide de la leçon et le guide du lab / de l’examen, regardez la vidéo pas à pas sur la validation dans la grille, réussissez la vérification des connaissances, puis réalisez le lab pratique dans ValidationClinic.
- LectureGuide de la leçon · 14 min
La validation à l’échelle d’une grille : CellValidating avec RowIndex, ColumnIndex et la FormattedValue pas encore validée, CellValidated pour le nettoyage, l’ErrorText de cellule face à l’ErrorText de ligne, DataError avec ThrowException à false, et des règles pour les nouvelles lignes et les lignes liées qui ne cassent pas la saisie. Ce que cela signifie pour un développeur qui connaît les bases de C# et débute dans le développement de formulaires Wisej.NET — et comment aborder ce module.
- LectureGuide du lab / de l’examen · 10 min
Ce que vous allez construire dans le lab pratique, l’approche suggérée et les livrables attendus.
- Leçon vidéoValider la cellule que l’utilisateur est encore en train de modifier · 14 min
Valider la cellule que l’utilisateur est encore en train de modifier — une vidéo pas à pas guidée du Module 6, construite étape par étape dans ValidationClinic. Elle se lance directement ici, dans le lecteur.
Transcription de la narration
La grille de contacts introduit un chemin d'édition différent du formulaire d'admission. Une cellule possède son propre éditeur et ses propres événements de validation. Réutilisez donc la même intention commerciale via les gestionnaires de grille plutôt que d'attendre que les gestionnaires de champs de texte du formulaire s'exécutent.
Séparez les trois problèmes avant de choisir un gestionnaire. Le format de courrier électronique appartient à la cellule, l'âge non numérique peut échouer à la conversion et un contact fermé sans date de clôture enfreint une règle dans tous les champs. Un seul contrôle ne peut pas expliquer les trois de manière fiable.
Lors de l'édition, validez e.FormattedValue car il contient ce que l'utilisateur est en train de saisir actuellement. Le Value stocké dans la cellule représente toujours l’entrée validée précédente. Vérifier cette ancienne valeur pourrait accepter l’erreur même que l’utilisateur vient d’introduire.
Utilisez le nom de la colonne pour sélectionner la règle dans CellValidating. Effacez le message précédent de cette cellule, inspectez la valeur modifiée et annulez avec une explication claire en cas d'échec. Cela maintient l'utilisateur à côté de l'entrée qui doit être corrigée.
Placez une erreur de valeur unique sur la cellule et une erreur de relation sur la ligne. Réservez DataError pour les échecs de conversion ou d’enregistrement signalés par la grille. Ignorez l'espace réservé de nouvelle ligne, car il ne s'agit pas encore d'un contact nécessitant une validation.
ValidateRow met à jour le message de ligne et la cellule de date de clôture ensemble, rendant la relation visible aux deux niveaux. Dans DataError, expliquez les échecs de conversion dans un langage ordinaire et enregistrez l'exception séparément afin que le diagnostic ne relève pas de la responsabilité de l'utilisateur.
Essayez d'abord l'e-mail mal formé : la validation maintient la modification en place et affiche l'erreur de cellule. Entrez ensuite les lettres correspondant à l'âge. Le message de conversion convivial montre un chemin d'échec différent, même si les deux erreurs se sont produites lors de la modification d'une cellule.
Le contact fermé ne peut toujours pas être enregistré tant que sa date de clôture requise n'est pas présente. L'erreur de ligne maintient cette relation visible, tandis que l'espace réservé est ignoré. Saisissez la date et enregistrez à nouveau pour vérifier que la correction de la règle permet la persistance.
Construisez les vérifications de la grille autour de la valeur modifiée actuelle, des relations entre les lignes et des erreurs de conversion conviviales. Effacez les erreurs de cellule réussies et protégez Save contre les échecs restants. Testez chaque couche séparément afin qu'une cellule valide ne puisse pas masquer une ligne de contact non valide.
- LectureExercice de code avec l’IA · 20 min
Construisez l’exemple ValidationClinic de ce module avec ChatGPT ou Claude à partir d’un prompt prêt à l’emploi qui oriente le modèle vers la spécification du module, puis relisez, exécutez et étendez ce qu’il vous renvoie — y compris en le comparant à notre propre solution de référence sur GitHub.
- Quiz de connaissancesVérification des connaissances — Module 6 · 10 min · Note de réussite 80%
- Lab pratiqueLab — Règles de cellule, erreurs de ligne et DataError · 45 min
Objectif: Faites en sorte que la grille des contacts de ValidationClinic refuse les données incorrectes. Gérez gridContacts.CellValidating : lisez e.FormattedValue plutôt que la valeur de la cellule, effacez l’ErrorText de la cellule, puis rejetez une valeur EmailColumn vide ou sans @ et une valeur AgeColumn en dehors de 0 à 120 avec e.Cancel = true et un ErrorText de cellule. Ajoutez une méthode ValidateRow qui définit l’ErrorText de ligne et l’erreur de la cellule ClosedDateColumn quand Status vaut Closed sans date de clôture, effacez les erreurs obsolètes dans CellValidated, et gérez DataError avec ThrowException = false, un message de cellule compréhensible et une trace de débogage de l’exception. Ignorez la nouvelle ligne de substitution tant qu’elle ne contient pas de données utilisateur, et bloquez Save tant qu’une ligne porte encore une erreur. Livrables : Gestionnaire CellValidating qui lit e.FormattedValue et valide les colonnes e-mail et âge ; Méthode ValidateRow qui définit l’ErrorText de ligne et l’erreur de la cellule de date de clôture pour les contacts Closed ; Gestionnaire CellValidated qui efface les erreurs de cellule obsolètes ; Gestionnaire DataError avec ThrowException = false, un message compréhensible et une exception journalisée ; Garde-fou de Save qui ignore la nouvelle ligne de substitution et refuse d’enregistrer tant qu’une ligne porte une erreur.
Module 7: UX de validation en production, error providers personnalisés et projet de synthèse
Module 7 de Validation dans Wisej.NET — créez des formulaires, des grilles et des éditeurs liés aux données qui valident la saisie clairement et n’enregistrent jamais de données incorrectes. Lisez le guide de la leçon et le guide du lab / de l’examen, regardez la vidéo pas à pas sur le pipeline de Save du projet de synthèse, réussissez la vérification des connaissances, puis réalisez le lab pratique dans ValidationClinic.
- LectureGuide de la leçon · 14 min
Assembler toutes les couches : un pipeline de Save volontairement banal et reproductible, un IErrorProvider personnalisé qui alimente un panneau récapitulatif, des providers d’icônes et de récapitulatif côte à côte, dix règles d’UX de validation, et le projet de synthèse ValidationClinic qui prouve où chaque vérification a sa place. Ce que cela signifie pour un développeur qui connaît les bases de C# et débute dans le développement de formulaires Wisej.NET — et comment aborder ce module.
- LectureGuide du lab / de l’examen · 10 min
Ce que vous allez construire dans le lab pratique, l’approche suggérée et les livrables attendus.
- Leçon vidéoUn seul bouton Save, toutes les couches de validation · 14 min
Un seul bouton Save, toutes les couches de validation — une vidéo pas à pas guidée du Module 7, construite étape par étape dans ValidationClinic. Elle se lance directement ici, dans le lecteur.
Transcription de la narration
Rassemblez les contrôles ValidationClinic dans un seul chemin de sauvegarde. La validation des champs, des modèles, des activités et de la grille doit désormais coopérer dans Wisej.NET, de sorte qu'une vérification réussie sur une couche ne contourne jamais un problème non résolu sur une autre.
Les validateurs individuellement corrects ne garantissent pas une sauvegarde correcte. Une modification en attente peut laisser le modèle obsolète, ou une erreur de grille peut ne jamais atteindre les vérifications du formulaire. Placez les étapes dans un ordre fixe et exigez que chaque étape réussisse.
Réinitialisez les commentaires et terminez la modification en cours avant de vérifier les champs, le modèle, les règles métier et les lignes de la grille. Arrêtez-vous à la première étape échouée. Cette séquence empêche un travail ultérieur de s'exécuter avec une entrée non valide et conserve l'écriture éventuelle derrière toutes les vérifications.
Utilisez le contrat IErrorProvider pour envoyer des messages sans lier la validation à un seul affichage. SummaryErrorProvider conserve un message pour chaque contrôle et masque son étiquette lorsqu'il n'en reste plus. Le résumé peut donc refléter les mêmes erreurs que le retour de terrain.
Revenez plus tôt lorsque la validation du champ ou du modèle échoue. Si la sauvegarde finale échoue, distinguez un nom en double que l'utilisateur peut corriger d'une panne système qu'il ne peut pas corriger. Acheminez le doublon vers son champ et expliquez calmement les autres échecs.
Examinez les commentaires dans le cadre du flux de travail, et pas seulement sous forme de texte d'erreur. Expliquez la correction près du champ et dans le résumé, conservez Annuler et gardez les traces techniques hors des messages des utilisateurs. Testez les entrées manquantes, invalides, valides et limites.
Premièrement, le nom manquant et l'email mal formé arrêtent la sauvegarde lors de la validation du champ. Corrigez ces champs et réessayez. Le modèle rejette ensuite l’âge de cent trente ans, montrant pourquoi la réussite des contrôles sur le terrain ne rend pas les contrôles ultérieurs facultatifs.
L'étape de la grille détecte les problèmes restants de courrier électronique et de lignes fermées, et le résumé explique les deux. Après ces corrections, chaque étape réussit et la sauvegarde se termine. La confirmation finale signifie désormais que tout le chemin de validation a été réussi.
Fournissez le chemin de sauvegarde complet avec le fournisseur de résumé et l'assistant de message partagé. Incluez la gestion des exceptions qui distingue les entrées corrigibles des pannes du système. Documentez les cas de test afin qu'un autre développeur puisse reproduire à la fois les sauvegardes bloquées et les corrections réussies.
- LectureExercice de code avec l’IA · 20 min
Construisez l’exemple ValidationClinic de ce module avec ChatGPT ou Claude à partir d’un prompt prêt à l’emploi qui oriente le modèle vers la spécification du module, puis relisez, exécutez et étendez ce qu’il vous renvoie — y compris en le comparant à notre propre solution de référence sur GitHub.
- Quiz de connaissancesVérification des connaissances — Module 7 · 10 min · Note de réussite 80%
- Lab pratiqueLab — Projet de synthèse : le pipeline de Save complet · 45 min
Objectif: Terminez le projet de synthèse ValidationClinic. Écrivez btnSave_Click comme un pipeline fixe : réinitialisez le récapitulatif, appelez bindingSource.EndEdit(), arrêtez-vous si ValidateChildren() échoue, arrêtez-vous si la vérification DataAnnotations échoue, arrêtez-vous si ContactValidator renvoie des erreurs métier, arrêtez-vous si la grille des contacts porte encore des erreurs de ligne, et seulement ensuite enregistrez dans un try/catch qui transforme un nom en double en erreur de champ et toute autre exception en message compréhensible. Créez SummaryErrorProvider en implémentant IErrorProvider, affectez-le à validation.ErrorProvider, et faites passer les erreurs par un utilitaire SetError qui écrit à la fois dans l’ErrorProvider à icônes et dans le provider récapitulatif. Testez des valeurs obligatoires, invalides, valides et aux limites, et rédigez un court README qui explique la conception de la validation. Livrables : Pipeline de Save qui exécute EndEdit, ValidateChildren, puis les vérifications du modèle, des règles métier et de la grille avant d’enregistrer ; Classe SummaryErrorProvider implémentant SetError et GetError d’IErrorProvider ; Utilitaire SetError qui écrit à la fois dans l’ErrorProvider à icônes et dans le provider récapitulatif ; try/catch autour de l’enregistrement qui distingue une erreur de nom en double des pannes système ; README avec la conception de la validation et des cas de test pour des valeurs obligatoires, invalides, valides et aux limites.