← Todos los cursos
UI · Curso gratuito

Validación en Wisej.NET

Toda aplicación de gestión depende de los datos que la gente introduce en ella. Este curso para principiantes te enseña a validar esa entrada al estilo de Wisej.NET: detectar los errores mientras el usuario edita, explicarlos con un lenguaje sencillo y asegurarte de que nunca se puedan guardar datos incorrectos, todo ello en torno al proyecto ValidationClinic, un formulario de alta de clientes y una cuadrícula de contactos editable. Siete módulos empiezan por el ciclo de vida de la validación (Validating, Validated, e.Cancel, AutoValidate y ValidateChildren) y pasan después a la respuesta visual con ErrorProvider y los resúmenes visibles, al extender Validation y sus reglas integradas, y a la validación personalizada con servicios reutilizables y clases ValidationRule. A continuación validarás el propio modelo con enlace de datos, DataAnnotations e IDataErrorInfo, validarás celdas y filas del DataGridView, y terminarás con un proceso de guardado completo y un error provider personalizado en el proyecto final. Está pensado para desarrolladores que conocen los fundamentos de C# y empiezan a crear formularios Wisej.NET.

Valida con claridad formularios, cuadrículas y editores enlazados a datos: eventos, ErrorProvider, reglas de validación, errores del modelo y celdas de cuadrícula.

Empezar este curso gratuito

También disponible en: EnglishDeutschFrançaisItaliano

Temario

Módulo 1: Fundamentos de la validación en Wisej.NET

Módulo 1 de Validación en Wisej.NET: crea formularios, cuadrículas y editores enlazados a datos que validan la entrada con claridad y nunca guardan datos incorrectos. Lee la guía de la lección y la guía del laboratorio / examen, mira el recorrido guiado sobre los fundamentos de la validación, supera la evaluación de conocimientos y completa el laboratorio práctico en ValidationClinic.

  1. LecturaGuía de la lección · 14 min

    Qué significa validar en una interfaz de Wisej.NET que se ejecuta en el servidor: el ciclo de vida de Validating y Validated, cancelar la entrada no válida con e.Cancel, el comportamiento del foco con AutoValidate, CausesValidation en los botones Cancel y ValidateChildren como protección de Save. Qué significa esto para un desarrollador que conoce C# básico y empieza a desarrollar formularios con Wisej.NET, y cómo leer este módulo.

    Leer la guía de la lección (PDF)

  2. LecturaGuía del laboratorio / examen · 10 min

    Qué vas a construir en el laboratorio práctico, el enfoque sugerido y los entregables requeridos.

    Leer la guía de la lección (PDF)

  3. Lección en vídeoCuándo se ejecuta la validación y qué detiene un guardado incorrecto · 14 min

    Cuándo se ejecuta la validación y qué detiene un guardado incorrecto: un recorrido guiado del Módulo 1, construido paso a paso en ValidationClinic. Se reproduce aquí mismo, en el reproductor.

    Transcripción de la narración

    Cree el formulario de admisión ValidationClinic en torno a dos oportunidades para detectar errores: cuando el usuario abandona un campo y cuando el usuario guarda. En Wisej.NET, estas comprobaciones funcionan juntas para que un campo intacto no pueda escapar de la validación.

    Ejecute comprobaciones rápidas en el evento de Validación, antes de que el usuario continúe. El navegador informa el cambio de enfoque, pero su controlador C sharp se ejecuta en el servidor. Mantener ese controlador breve evita que la navegación normal parezca lenta.

    Utilice Validación para decidir si el valor es aceptable. Cancelar el evento y explicar el problema cuando no sea así. Validado sigue solo una verificación exitosa, lo que lo convierte en el lugar apropiado para la limpieza, como recortar un nombre aceptado.

    Establezca el comportamiento AutoValidate del formulario en su constructor. En cada controlador, SetError explica un valor rechazado y e.Cancel lo rechaza. Borre el mensaje después de la corrección para que la interfaz refleje el valor actual en lugar de un error anterior.

    Mantenga el foco en un campo no válido cuando el usuario necesite corregirlo. Dé a Cancelar una ruta de escape separada configurando CausesValidation en falso. De lo contrario, la validación podría impedir que alguien abandone un formulario incompleto.

    Antes de escribir al cliente llame a ValidateChildren desde Save. Esto también verifica los campos que el usuario nunca visitó. Si algún controlador cancela la validación, detenga el guardado; sólo los valores aceptados deben llegar a la operación de escritura y su manejo de excepciones.

    Observe cómo el nombre vacío mantiene el foco mientras el icono de error explica el motivo. Después de la corrección, se recorta el nombre aceptado. El correo electrónico con formato incorrecto se rechaza de forma independiente, mientras que Cancelar aún cierra el formulario sin necesidad de corregir ninguno de los campos.

    Pruebe Guardar antes de tocar el campo de correo electrónico. ValidateChildren encuentra esa entrada faltante e impide la escritura aunque no se haya producido ningún cambio de enfoque allí. Corrija la dirección y guárdela nuevamente para confirmar que la entrada válida sigue la ruta exitosa.

    Para esta práctica de laboratorio, conecte la validación de campos, la limpieza de valores exitosos y la verificación final de Guardar en un formulario de admisión. Prueba Cancelar con entrada no válida también. Su nota de laboratorio debe explicar cómo estas rutas evitan datos incorrectos sin atrapar al usuario.

  4. LecturaEjercicio de programación con IA · 20 min

    Construye el ejemplo ValidationClinic de este módulo con ChatGPT o Claude a partir de un prompt listo para usar que dirige al modelo a la especificación del módulo, y después revisa, ejecuta y amplía lo que te devuelva — incluso comparándolo con nuestra propia solución de referencia en GitHub.

    Leer la guía de la lección (PDF)

  5. CuestionarioEvaluación de conocimientos — Módulo 1 · 10 min · Nota mínima 80%
  6. Laboratorio prácticoLaboratorio — Validating, Validated y un guardado protegido · 45 min

    Objetivo: Crea el formulario de alta de clientes de ValidationClinic con los TextBox txtName y txtEmail, un botón Save y un botón Cancel. Asocia controladores Validating que establezcan e.Cancel = true y un mensaje de ErrorProvider cuando el nombre esté vacío o el correo electrónico no contenga @, que borren el mensaje cuando el valor sea válido, y recorta los espacios del nombre en su controlador Validated. Establece el modo AutoValidate del formulario, asegúrate de que Cancel no provoque validación para que el usuario siempre pueda salir, y llama a ValidateChildren() al principio de btnSave_Click para que Save se detenga cuando algún campo no sea válido. Termina con una breve nota del laboratorio que explique el comportamiento del foco que has elegido. Entregables: Formulario de alta de clientes con txtName y txtEmail, un botón Save y un botón Cancel; Controladores Validating que establecen e.Cancel = true y un mensaje de error para un nombre vacío y un correo electrónico no válido; Controlador Validated que recorta el nombre aceptado; Controlador de Save que llama a ValidateChildren() y se detiene cuando devuelve false; Nota del laboratorio que indica el modo AutoValidate elegido y por qué Cancel sigue funcionando en un formulario no válido.

Módulo 2: Validación programática y avisos con ErrorProvider

Módulo 2 de Validación en Wisej.NET: crea formularios, cuadrículas y editores enlazados a datos que validan la entrada con claridad y nunca guardan datos incorrectos. Lee la guía de la lección y la guía del laboratorio / examen, mira el recorrido guiado sobre los avisos con ErrorProvider, supera la evaluación de conocimientos y completa el laboratorio práctico en ValidationClinic.

  1. LecturaGuía de la lección · 14 min

    Un ErrorProvider por formulario, SetError y el borrado de errores por control, InvalidMessage para avisos locales sencillos, un pequeño tipo de resultado FieldValidation que mantiene las reglas fuera de la interfaz y un resumen de validación visible para que ningún error dependa de pasar el ratón sobre un icono. Qué significa esto para un desarrollador que conoce C# básico y empieza a desarrollar formularios con Wisej.NET, y cómo leer este módulo.

    Leer la guía de la lección (PDF)

  2. LecturaGuía del laboratorio / examen · 10 min

    Qué vas a construir en el laboratorio práctico, el enfoque sugerido y los entregables requeridos.

    Leer la guía de la lección (PDF)

  3. Lección en vídeoIconos, mensajes y un resumen que nadie puede pasar por alto · 14 min

    Iconos, mensajes y un resumen que nadie puede pasar por alto: un recorrido guiado del Módulo 2, construido paso a paso en ValidationClinic. Se reproduce aquí mismo, en el reproductor.

    Transcripción de la narración

    Envíe comentarios en el formulario de contacto que sigan siendo útiles después del primer error. Un ErrorProvider maneja los íconos, los asistentes reutilizables deciden qué valores no son válidos y un resumen visible permite a los usuarios revisar todos los problemas juntos.

    Separe comprobar un valor de mostrar su error. Los administradores de campo independientes pueden dejar íconos obsoletos o borrar mensajes no relacionados. Un enfoque compartido hace que cada corrección afecte al campo relevante preservando al mismo tiempo los problemas que aún necesitan atención.

    Elige cómo llega cada mensaje al usuario. SetError agrega un ícono al lado de una entrada, mientras que InvalidMessage proporciona la información sobre herramientas propia del control. El resumen proporciona texto legible para todo el formulario, por lo que los errores no se pueden descubrir simplemente al pasar el cursor.

    Configure un único ErrorProvider para el formulario, con íconos fijos ubicados a la derecha. Deje que ValidateEmail devuelva un resultado FieldValidation en lugar de cambiar los controles. Esa separación mantiene la regla reutilizable y deja la presentación a la forma.

    Aplicar procesa cada resultado, incluidos los exitosos. Un mensaje vacío elimina el icono antiguo de ese campo; Los resultados no válidos también completan el resumen. Al devolver si se aprobaron todos los resultados, Save tiene una decisión clara antes de escribir cualquier dato.

    Relacione los comentarios con el problema. Coloque una corrección de campo al lado de su entrada, explique una regla de negocios en el resumen guardado y brinde un mensaje amigable a una falla del sistema. Los usuarios deben comprender qué acción está disponible para ellos.

    Guarde el formulario con los tres campos de contacto no válidos. Compare los íconos locales con el resumen: ambos deberían describir los mismos problemas restantes. La información sobre herramientas del código de cliente muestra la ruta de visualización alternativa sin reemplazar la explicación de todo el formulario.

    Corrija solo el correo electrónico y abandone ese campo. Su ícono y entrada de resumen desaparecen, pero el nombre y los mensajes telefónicos permanecen. Esto demuestra por qué los resultados individuales deben borrar errores individuales en lugar de borrar a todo el proveedor.

    Cree los asistentes, el ErrorProvider compartido y el método Aplicar como una ruta de retroalimentación. Verifique que corregir un campo preserve otros errores. Compare el código de cliente InvalidMessage con los iconos y el resumen para explicar cuándo es útil cada presentación.

  4. LecturaEjercicio de programación con IA · 20 min

    Construye el ejemplo ValidationClinic de este módulo con ChatGPT o Claude a partir de un prompt listo para usar que dirige al modelo a la especificación del módulo, y después revisa, ejecuta y amplía lo que te devuelva — incluso comparándolo con nuestra propia solución de referencia en GitHub.

    Leer la guía de la lección (PDF)

  5. CuestionarioEvaluación de conocimientos — Módulo 2 · 10 min · Nota mínima 80%
  6. Laboratorio prácticoLaboratorio — ErrorProvider, métodos auxiliares y un resumen de validación · 45 min

    Objetivo: Convierte el formulario de contacto de ValidationClinic en un formulario de validación programática. Crea un ErrorProvider para el formulario con ContainerControl establecido, NeverBlink y el icono alineado a la derecha; escribe un record FieldValidation y los métodos auxiliares ValidateName, ValidateEmail y ValidatePhone, que devuelven un mensaje en lugar de tocar la interfaz, y un método Apply que llama a SetError para cada resultado y rellena un validationSummaryLabel visible solo mientras haya errores. Usa InvalidMessage en el campo del código de cliente para comparar los dos estilos de aviso, y asegúrate de que corregir un campo borra solo el error de ese campo. Entregables: ErrorProvider a nivel de formulario con ContainerControl, BlinkStyle y alineación del icono configurados; Record FieldValidation y métodos auxiliares ValidateName, ValidateEmail y ValidatePhone; Método Apply que establece o borra el error de cada control y devuelve si todos los campos son válidos; validationSummaryLabel que enumera todos los problemas actuales y se oculta cuando no hay ninguno; Un campo que usa InvalidMessage en lugar de ErrorProvider, con una nota que compara ambos.

Módulo 3: Reglas de validación integradas y el extensor Validation

Módulo 3 de Validación en Wisej.NET: crea formularios, cuadrículas y editores enlazados a datos que validan la entrada con claridad y nunca guardan datos incorrectos. Lee la guía de la lección y la guía del laboratorio / examen, mira el recorrido guiado sobre el extensor Validation, supera la evaluación de conocimientos y completa el laboratorio práctico en ValidationClinic.

  1. LecturaGuía de la lección · 14 min

    El extensor Validation de Wisej.NET: la propiedad extendida ValidationRules en tiempo de diseño, SetValidationRules en tiempo de ejecución, las reglas Required, Email, Integer, Decimal, Currency, Telephone y Regex, un orden de reglas que se detiene en el primer fallo y los destinos de visualización ErrorProvider o Label. Qué significa esto para un desarrollador que conoce C# básico y empieza a desarrollar formularios con Wisej.NET, y cómo leer este módulo.

    Leer la guía de la lección (PDF)

  2. LecturaGuía del laboratorio / examen · 10 min

    Qué vas a construir en el laboratorio práctico, el enfoque sugerido y los entregables requeridos.

    Leer la guía de la lección (PDF)

  3. Lección en vídeoDeclara las reglas una vez y deja que el extensor las ejecute · 14 min

    Declara las reglas una vez y deja que el extensor las ejecute: un recorrido guiado del Módulo 3, construido paso a paso en ValidationClinic. Se reproduce aquí mismo, en el reproductor.

    Transcripción de la narración

    Mueva las reglas de campo repetidas al extensor de validación. En Wisej.NET, describir los requisitos de cada campo permite al extensor ejecutar comprobaciones consistentes para ValidationClinic, mientras que el formulario sigue siendo responsable de presentar comentarios útiles al usuario.

    El extensor se conecta a Validating y Validated en los controles. En lugar de repetir la misma verificación de valores vacíos en varios controladores, adjunte metadatos de reglas a cada campo. El flujo del evento sigue siendo familiar mientras las definiciones se vuelven más fáciles de compartir.

    Elija una regla integrada para el tipo de valor que acepta, como correo electrónico, número entero, moneda o teléfono. Utilice una expresión regular cuando el patrón requerido lo necesite. Asigne a cada regla un InvalidMessage que explique la corrección en el idioma del usuario.

    Agregue Validación en el diseñador, luego abra la colección ValidationRules de un control. Coloque Requerido antes de Correo electrónico. El orden de cobro también es el orden de ejecución, por lo que la organización de estas entradas determina qué explicación recibe primero el usuario.

    Un error en una regla detiene las reglas restantes y cancela la validación. Es por eso que un correo electrónico vacío debería fallar. Requerido primero: solicitar una dirección faltante es más útil que informar un problema de formato antes de que exista una dirección.

    La configuración del tiempo de ejecución sigue el mismo modelo de reglas. Cree las matrices una vez en ClinicRules, seleccione el destino de visualización y luego asigne cada campo a través de SetValidationRules. Mantener las definiciones juntas evita copias ligeramente diferentes de la misma regla en todos los formularios.

    Compare una dirección vacía, una dirección con formato incorrecto y una válida. Cada intento debería producir sólo el primer error aplicable. Cuando el valor se vuelve válido, tanto el icono como la entrada de resumen se borran, lo que confirma que la presentación sigue el último resultado de validación.

    Las reglas pueden enviar retroalimentación al control, a un ErrorProvider o a una etiqueta. Elija el objetivo deliberadamente y luego actualice el resumen de los propios eventos del extensor. Esto mantiene el resumen sincronizado con las comprobaciones que realmente se ejecutaron.

    Reemplace los controladores repetidos con definiciones ClinicRules compartidas. Mantenga Requerido primero y conecte el resumen a los eventos del extensor. Su prueba debe mostrar que los valores vacíos, con formato incorrecto y corregidos producen el mensaje apropiado sin retener comentarios obsoletos.

  4. LecturaEjercicio de programación con IA · 20 min

    Construye el ejemplo ValidationClinic de este módulo con ChatGPT o Claude a partir de un prompt listo para usar que dirige al modelo a la especificación del módulo, y después revisa, ejecuta y amplía lo que te devuelva — incluso comparándolo con nuestra propia solución de referencia en GitHub.

    Leer la guía de la lección (PDF)

  5. CuestionarioEvaluación de conocimientos — Módulo 3 · 10 min · Nota mínima 80%
  6. Laboratorio prácticoLaboratorio — Reglas, orden de las reglas y destinos de visualización · 45 min

    Objetivo: Sustituye los controladores de campo escritos a mano en ValidationClinic por el extensor Validation. Añade un componente Validation y un ErrorProvider al formulario de alta, establece ContainerControl y validation.ErrorProvider, y llama a SetValidationRules en un método ConfigureValidationRules: Required y después Email en txtEmail, Required y después Integer en txtAge, Required y después Telephone en txtPhone, Currency en txtCreditLimit y una regla Regex para el código de cliente. Coloca Required en primer lugar en todos los casos para que gane el mensaje más útil, engancha el evento Validating del extensor para actualizar el resumen y traslada los arrays de reglas a un pequeño método auxiliar reutilizable para que otro formulario pueda aplicar la misma configuración. Entregables: Componente Validation conectado al formulario y a un ErrorProvider como destino de visualización; Método ConfigureValidationRules que llama a SetValidationRules para el correo electrónico, la edad, el teléfono, el límite de crédito y el código de cliente; Regla Required colocada en primer lugar en cada campo obligatorio, con un texto InvalidMessage claro; Controlador Validating del extensor que mantiene el resumen de validación sincronizado con las reglas; Método auxiliar de configuración de reglas reutilizable al que puede llamar un segundo formulario.

Módulo 4: Validación personalizada: métodos, servicios y clases ValidationRule

Módulo 4 de Validación en Wisej.NET: crea formularios, cuadrículas y editores enlazados a datos que validan la entrada con claridad y nunca guardan datos incorrectos. Lee la guía de la lección y la guía del laboratorio / examen, mira el recorrido guiado sobre la validación personalizada, supera la evaluación de conocimientos y completa el laboratorio práctico en ValidationClinic.

  1. LecturaGuía de la lección · 14 min

    Reglas de negocio que las reglas integradas no pueden expresar: métodos de validación que devuelven un string, un servicio ContactValidator que se puede probar sin la interfaz, una clase ValidationRule personalizada con OnValidating, OnValidated y OnControlCreated, y reglas entre campos que marcan todos los controles implicados. Qué significa esto para un desarrollador que conoce C# básico y empieza a desarrollar formularios con Wisej.NET, y cómo leer este módulo.

    Leer la guía de la lección (PDF)

  2. LecturaGuía del laboratorio / examen · 10 min

    Qué vas a construir en el laboratorio práctico, el enfoque sugerido y los entregables requeridos.

    Leer la guía de la lección (PDF)

  3. Lección en vídeoDe comprobaciones puntuales a reglas reutilizables y comprobables · 14 min

    De comprobaciones puntuales a reglas reutilizables y comprobables: un recorrido guiado del Módulo 4, construido paso a paso en ValidationClinic. Se reproduce aquí mismo, en el reproductor.

    Transcripción de la narración

    Módulo cuatro. Validación personalizada en Wisej.NET. Un formulario puede aceptar valores formateados correctamente que aún infringen las reglas comerciales. Arreglemos eso.

    Las reglas integradas verifican la forma de un valor. Pero una fecha válida aún puede venir después de una fecha de finalización, y una fecha de nacimiento válida puede pertenecer a alguien demasiado joven. Éstas son reglas comerciales. Cuando compare campos, calcule una edad o verifique valores juntos, escriba una regla de validación personalizada.

    La validación personalizada tiene tres casas. Primero, un método que devuelve un mensaje de error. En segundo lugar, un servicio que devuelve registros ValidationMessage. En tercer lugar, una clase derivada de ValidationRule que ejecuta el extensor de validación. Elija la casa que se ajuste a la responsabilidad de su gobierno.

    ValidateStartEndDates devuelve una cadena vacía cuando las fechas son válidas o un mensaje de error cuando no lo son. Aplique ese mismo mensaje a ambos selectores de fechas. El servicio ContactValidator no depende de los controles. Valida el modelo, por lo que puede probar la lógica empresarial sin la interfaz de usuario.

    MinimumAgeValidationRule deriva de ValidationRule. Su método OnValidating devuelve verdadero o falso. Adjunte la regla al selector de fecha de nacimiento con SetValidationRules. ApplyModelValidation conecta los resultados del servicio a la pantalla. Asigna nombres de campos a controles, por lo que aparece cada mensaje donde el usuario puede solucionar el problema.

    El controlador de guardado ejecuta la validación en orden. Primero, verifique las reglas de campo. Luego ejecute el servicio de validación y la regla de fecha. Regrese temprano si falla alguna capa. Llame al repositorio solo después de que pase cada verificación. La base de datos nunca debe recibir datos que su validación ya haya rechazado.

    Ahora intenta guardar con la fecha de inicio después de la fecha de finalización. Ambos selectores muestran el mismo error y el resumen muestra un solo mensaje.

    Corrija la fecha de finalización. Ambos errores se aclaran juntos. Debido a que esta regla compara dos valores, ambos controles comparten la retroalimentación.

    Introduzca una fecha de nacimiento a partir de veintiún once. La regla de edad mínima la rechaza tan pronto como el usuario abandona el selector.

    Corrija la fecha de nacimiento y el error desaparecerá. Guardar ahora ejecuta cada capa de validación con éxito y luego almacena el contacto exactamente una vez.

    Para el laboratorio cuatro, implemente la verificación de fecha, el servicio de validación, la asignación de mensajes y la regla de edad mínima.

    Conéctelos en un controlador de guardado que nunca guarda datos no válidos.

  4. LecturaEjercicio de programación con IA · 20 min

    Construye el ejemplo ValidationClinic de este módulo con ChatGPT o Claude a partir de un prompt listo para usar que dirige al modelo a la especificación del módulo, y después revisa, ejecuta y amplía lo que te devuelva — incluso comparándolo con nuestra propia solución de referencia en GitHub.

    Leer la guía de la lección (PDF)

  5. CuestionarioEvaluación de conocimientos — Módulo 4 · 10 min · Nota mínima 80%
  6. Laboratorio prácticoLaboratorio — Servicio validador y una ValidationRule personalizada · 45 min

    Objetivo: Añade validación personalizada a ValidationClinic en tres pasos. Escribe ValidateStartEndDates como un método que devuelve una cadena vacía cuando todo es válido y un mensaje cuando la fecha de inicio es posterior a la fecha de fin, y establece ese mensaje tanto en dtpStart como en dtpEnd. Traslada las reglas del nombre, el correo electrónico y la fecha de nacimiento a un servicio ContactValidator que devuelve una lista de records ValidationMessage, y asocia cada nombre de campo a su control en ApplyModelValidation. Después crea MinimumAgeValidationRule derivando de ValidationRule con una propiedad MinimumAge, sobrescribe OnValidating para calcular la edad a partir del DateTimePicker, asóciala a dtpBirthDate mediante el extensor Validation y ejecuta el servicio en btnSave_Click antes de guardar nada. Entregables: Método ValidateStartEndDates que establece el mismo error en los dos selectores de fecha y borra ambos cuando se corrige; Servicio ContactValidator que devuelve records ValidationMessage para el nombre, el correo electrónico y la fecha de nacimiento; Método ApplyModelValidation que asocia cada nombre de campo a su control y al resumen; Clase MinimumAgeValidationRule que sobrescribe OnValidating, asociada a dtpBirthDate; Controlador de Save que ejecuta las reglas de campo, después el servicio validador y solo entonces guarda.

Módulo 5: Validación enlazada a datos y errores del modelo

Módulo 5 de Validación en Wisej.NET: crea formularios, cuadrículas y editores enlazados a datos que validan la entrada con claridad y nunca guardan datos incorrectos. Lee la guía de la lección y la guía del laboratorio / examen, mira el recorrido guiado sobre la validación enlazada a datos, supera la evaluación de conocimientos y completa el laboratorio práctico en ValidationClinic.

  1. LecturaGuía de la lección · 14 min

    Validar el modelo, no solo los controles: BindingSource y EndEdit, DataAnnotations ejecutadas con Validator.TryValidateObject, la asociación de MemberNames con los controles, IDataErrorInfo con un ErrorProvider enlazado a datos, BindToDataAndErrors y el orden seguro de guardado. Qué significa esto para un desarrollador que conoce C# básico y empieza a desarrollar formularios con Wisej.NET, y cómo leer este módulo.

    Leer la guía de la lección (PDF)

  2. LecturaGuía del laboratorio / examen · 10 min

    Qué vas a construir en el laboratorio práctico, el enfoque sugerido y los entregables requeridos.

    Leer la guía de la lección (PDF)

  3. Lección en vídeoDeja que el modelo diga qué es válido · 14 min

    Deja que el modelo diga qué es válido: un recorrido guiado del Módulo 5, construido paso a paso en ValidationClinic. Se reproduce aquí mismo, en el reproductor.

    Transcripción de la narración

    Módulo cinco. Validación vinculada a datos en Wisej.NET. El formulario de admisión ahora edita un modelo de edición de contacto. Sus reglas básicas de validación pertenecen a los datos, por lo que las mismas reglas pueden proteger el formulario, la cuadrícula y otras formas de cambiar un contacto.

    Un controlador de formulario solo protege los cambios realizados a través de ese formulario. Una cuadrícula, una importación o un servicio pueden actualizar el mismo contacto sin ejecutar esos controladores. Coloque las reglas básicas en el modelo, luego haga que cada ruta de guardado las ejecute antes de aceptar los datos.

    Primero, finalice la edición actual. Es posible que el valor que aún se está escribiendo no haya llegado al modelo todavía. Llame a End Edit en la fuente de enlace de contacto antes de validar. De lo contrario, el validador podría verificar un valor anterior aunque el usuario ya haya corregido el campo.

    Las anotaciones de datos describen las reglas, pero no se ejecutan por sí mismas. Try Validate Object los aplica y recopila los resultados. Establezca validar todas las propiedades en verdadero. Sin esa opción, solo se marca Requerido, por lo que podría pasar un correo electrónico con formato incorrecto o una edad fuera de rango.

    El validador devuelve nombres de propiedades, no controles. Utilice un mapa de campo para conectar cada resultado con la entrada correcta. Coloque el mensaje al lado de esa entrada y en el resumen. Si una propiedad no tiene ningún control coincidente, mantenga su mensaje en el resumen para que el error siga siendo visible.

    Hay otro enfoque. Un modelo que implementa I Data Error Info responde preguntas de validación para cada propiedad. Un proveedor de errores vinculado a datos lee esas respuestas. Al cambiar de origen en tiempo de ejecución, Bind To Data And Errors establece el origen y el miembro juntos, evitando una discrepancia temporal.

    Intente guardar el contacto no válido. End Edit primero confirma la entrada actual al modelo. Las comprobaciones de anotaciones rechazan el nombre, el correo electrónico y la edad. El mapa de campo coloca cada mensaje al lado de su entrada y en el resumen. La ruta de guardado se detiene antes de escribir algo.

    Corrija los valores y guárdelos nuevamente. Las comprobaciones ahora pasan y el contacto se guarda. En el modelo I Data Error Info, al borrar el nombre, el icono de error vuelve a aparecer a través del enlace de datos. No es necesario que el formulario llame a Set Error para ese cambio.

    Para la práctica cinco, vincule el editor al modelo, finalice las ediciones antes de validar y asigne los resultados de las anotaciones a los campos y al resumen. Luego conecte el modelo I Data Error Info a través de Bind To Data And Errors. Verifique que los datos no válidos nunca lleguen al repositorio.

  4. LecturaEjercicio de programación con IA · 20 min

    Construye el ejemplo ValidationClinic de este módulo con ChatGPT o Claude a partir de un prompt listo para usar que dirige al modelo a la especificación del módulo, y después revisa, ejecuta y amplía lo que te devuelva — incluso comparándolo con nuestra propia solución de referencia en GitHub.

    Leer la guía de la lección (PDF)

  5. CuestionarioEvaluación de conocimientos — Módulo 5 · 10 min · Nota mínima 80%
  6. Laboratorio prácticoLaboratorio — DataAnnotations, IDataErrorInfo y EndEdit · 45 min

    Objetivo: Enlaza el formulario de alta de ValidationClinic a un ContactEditModel mediante un contactBindingSource y añade las anotaciones Required, StringLength, EmailAddress y Range a sus propiedades Name, Email y Age. En btnSave_Click llama primero a contactBindingSource.EndEdit(), ejecuta Validator.TryValidateObject con validateAllProperties establecido en true y asocia el nombre de miembro de cada ValidationResult a su control mediante un mapa de campos y el resumen de validación. Después implementa IDataErrorInfo en un segundo modelo, dirige el ErrorProvider al origen de enlace con BindToDataAndErrors y muestra cómo aparecen los mismos errores a través del enlace a datos sin ninguna llamada a SetError escrita a mano. Entregables: ContactEditModel con DataAnnotations enlazado al formulario mediante un BindingSource; Controlador de Save que llama a EndEdit antes de ejecutar Validator.TryValidateObject; Mapa de campos que convierte los nombres de miembro de ValidationResult en errores de control y líneas del resumen; Modelo IDataErrorInfo cuyos errores aparecen a través de un ErrorProvider enlazado a datos; Llamada a BindToDataAndErrors usada cuando el origen de datos del proveedor cambia en tiempo de ejecución.

Módulo 6: Validación de celdas y errores de fila en DataGridView

Módulo 6 de Validación en Wisej.NET: crea formularios, cuadrículas y editores enlazados a datos que validan la entrada con claridad y nunca guardan datos incorrectos. Lee la guía de la lección y la guía del laboratorio / examen, mira el recorrido guiado sobre la validación en la cuadrícula, supera la evaluación de conocimientos y completa el laboratorio práctico en ValidationClinic.

  1. LecturaGuía de la lección · 14 min

    Validación a escala de cuadrícula: CellValidating con RowIndex, ColumnIndex y el FormattedValue aún no confirmado, CellValidated para la limpieza, el ErrorText de la celda frente al ErrorText de la fila, DataError con ThrowException establecido en false, y reglas para la fila nueva y las filas enlazadas que no interrumpen la edición. Qué significa esto para un desarrollador que conoce C# básico y empieza a desarrollar formularios con Wisej.NET, y cómo leer este módulo.

    Leer la guía de la lección (PDF)

  2. LecturaGuía del laboratorio / examen · 10 min

    Qué vas a construir en el laboratorio práctico, el enfoque sugerido y los entregables requeridos.

    Leer la guía de la lección (PDF)

  3. Lección en vídeoValida la celda que el usuario todavía está editando · 14 min

    Valida la celda que el usuario todavía está editando: un recorrido guiado del Módulo 6, construido paso a paso en ValidationClinic. Se reproduce aquí mismo, en el reproductor.

    Transcripción de la narración

    La cuadrícula de contactos presenta una ruta de edición diferente a la del formulario de admisión. Una celda tiene su propio editor y eventos de validación, así que reutilice la misma intención comercial a través de controladores de cuadrícula en lugar de esperar que se ejecuten los controladores de campo de texto del formulario.

    Separe los tres problemas antes de elegir un manejador. El formato del correo electrónico pertenece a la celda, la edad no numérica puede fallar en la conversión y un contacto cerrado sin una fecha de cierre viola una regla en todos los campos. Un solo cheque no puede explicar los tres de manera confiable.

    Durante la edición, valide e.FormattedValue porque contiene lo que el usuario está escribiendo ahora. El Value almacenado en la celda todavía representa la entrada confirmada anterior. Verificar ese valor anterior podría aceptar el mismo error que acaba de introducir el usuario.

    Utilice el nombre de la columna para seleccionar la regla en CellValidating. Borre el mensaje anterior de esa celda, inspeccione el valor editado y cancele con una explicación clara cuando falle. Esto mantiene al usuario al lado de la entrada que necesita corrección.

    Coloque un error de valor único en la celda y un error de relación en la fila. Reserve DataError para errores de conversión o guardado que informe la grilla. Omita el marcador de posición de la nueva fila, ya que aún no es un contacto que requiere validación.

    ValidateRow actualiza el mensaje de fila y la celda de fecha de cierre juntos, haciendo que la relación sea visible en ambos niveles. En DataError, explique las fallas de conversión en lenguaje común y registre la excepción por separado para que el diagnóstico no sea responsabilidad del usuario.

    Pruebe primero con el correo electrónico con formato incorrecto: la validación mantiene la edición en su lugar y muestra el error de celda. Luego ingrese letras para la edad. El amigable mensaje de conversión demuestra una ruta de error diferente, aunque ambos errores ocurrieron al editar una celda.

    El contacto cerrado aún no puede guardar hasta que esté presente la fecha de cierre requerida. El error de fila mantiene esa relación visible, mientras que se ignora el marcador de posición. Ingrese la fecha y guárdela nuevamente para verificar que corregir la regla permita la persistencia.

    Cree comprobaciones de cuadrícula en torno al valor editado actual, las relaciones de filas y los errores de conversión amigables. Borre los errores de celda exitosos y proteja Guardar contra fallas restantes. Pruebe cada capa por separado para que una celda válida no pueda ocultar una fila de contacto no válida.

  4. LecturaEjercicio de programación con IA · 20 min

    Construye el ejemplo ValidationClinic de este módulo con ChatGPT o Claude a partir de un prompt listo para usar que dirige al modelo a la especificación del módulo, y después revisa, ejecuta y amplía lo que te devuelva — incluso comparándolo con nuestra propia solución de referencia en GitHub.

    Leer la guía de la lección (PDF)

  5. CuestionarioEvaluación de conocimientos — Módulo 6 · 10 min · Nota mínima 80%
  6. Laboratorio prácticoLaboratorio — Reglas de celda, errores de fila y DataError · 45 min

    Objetivo: Haz que la cuadrícula de contactos de ValidationClinic rechace los datos incorrectos. Gestiona gridContacts.CellValidating: lee e.FormattedValue en lugar del valor de la celda, borra el ErrorText de la celda y rechaza un valor de EmailColumn vacío o sin @ y un valor de AgeColumn fuera del rango de 0 a 120 con e.Cancel = true y un ErrorText en la celda. Añade un método ValidateRow que establezca el ErrorText de la fila y el error de la celda ClosedDateColumn cuando Status sea Closed sin fecha de cierre, borra los errores obsoletos en CellValidated y gestiona DataError con ThrowException = false, un mensaje comprensible en la celda y un registro de depuración de la excepción. Omite la fila nueva de marcador de posición hasta que contenga datos del usuario y bloquea Save mientras alguna fila tenga todavía un error. Entregables: Controlador CellValidating que lee e.FormattedValue y valida las columnas de correo electrónico y edad; Método ValidateRow que establece el ErrorText de la fila y el error de la celda de fecha de cierre para los contactos Closed; Controlador CellValidated que borra los errores de celda obsoletos; Controlador DataError con ThrowException = false, un mensaje comprensible y la excepción registrada; Protección de Save que omite la fila nueva de marcador de posición y se niega a guardar mientras alguna fila tenga un error.

Módulo 7: UX de validación en producción, proveedores de errores personalizados y proyecto final

Módulo 7 de Validación en Wisej.NET: crea formularios, cuadrículas y editores enlazados a datos que validan la entrada con claridad y nunca guardan datos incorrectos. Lee la guía de la lección y la guía del laboratorio / examen, mira el recorrido guiado sobre el flujo de Save del proyecto final, supera la evaluación de conocimientos y completa el laboratorio práctico en ValidationClinic.

  1. LecturaGuía de la lección · 14 min

    Unir todas las capas: un flujo de Save sencillo y repetible, un IErrorProvider personalizado que alimenta un panel de resumen, proveedores de iconos y de resumen trabajando en paralelo, diez reglas de UX de validación y el proyecto final ValidationClinic, que demuestra dónde debe ir cada comprobación. Qué significa esto para un desarrollador que conoce C# básico y empieza a desarrollar formularios con Wisej.NET, y cómo leer este módulo.

    Leer la guía de la lección (PDF)

  2. LecturaGuía del laboratorio / examen · 10 min

    Qué vas a construir en el laboratorio práctico, el enfoque sugerido y los entregables requeridos.

    Leer la guía de la lección (PDF)

  3. Lección en vídeoUn solo botón Save, todas las capas de validación · 14 min

    Un solo botón Save, todas las capas de validación: un recorrido guiado del Módulo 7, construido paso a paso en ValidationClinic. Se reproduce aquí mismo, en el reproductor.

    Transcripción de la narración

    Lleve las comprobaciones ValidationClinic a una única ruta de guardado. La validación de campo, modelo, negocio y red ahora deben cooperar en Wisej.NET, por lo que una verificación exitosa en una capa nunca pasa por alto un problema no resuelto en otra.

    Los validadores individualmente correctos no garantizan un guardado correcto. Una edición pendiente puede dejar el modelo obsoleto o es posible que un error de cuadrícula nunca llegue a las comprobaciones del formulario. Coloque las etapas en un orden fijo y exija que cada etapa tenga éxito.

    Restablezca los comentarios y finalice la edición actual antes de verificar los campos, el modelo, las reglas comerciales y las filas de la cuadrícula. Deténgase en la primera etapa fallida. Esta secuencia evita que se ejecute trabajo posterior con entradas no válidas y mantiene la escritura final detrás de todas las comprobaciones.

    Utilice el contrato IErrorProvider para enviar mensajes sin vincular la validación a una pantalla. SummaryErrorProvider conserva un mensaje para cada control y oculta su etiqueta cuando no queda ninguno. Por lo tanto, el resumen puede reflejar los mismos errores que los comentarios de campo.

    Regrese temprano cuando falle la validación del campo o del modelo. Si el resultado final guarda, distinga un nombre duplicado que el usuario pueda corregir de una falla del sistema que no pueda corregir. Enrute el duplicado a su campo y explique otras fallas con calma.

    Revise los comentarios como parte del flujo de trabajo, no solo como texto de error. Explique la corrección cerca del campo y en el resumen, conserve Cancelar y mantenga rastros técnicos fuera de los mensajes de los usuarios. Pruebe las entradas faltantes, no válidas, válidas y de límites.

    Primero, el nombre que falta y el correo electrónico con formato incorrecto detienen el guardado durante la validación del campo. Corrija esos campos y vuelva a intentarlo. Luego, el modelo rechaza la edad de ciento treinta años, mostrando por qué pasar las verificaciones de campo no hace que las verificaciones posteriores sean opcionales.

    La etapa de cuadrícula detecta los problemas restantes de correo electrónico y de fila cerrada, y el resumen explica ambos. Después de esas correcciones, cada etapa tiene éxito y se completa el guardado. La confirmación final ahora significa que se pasó todo el camino de validación.

    Entregue la ruta de guardado completa con el proveedor de resumen y el asistente de mensajes compartidos. Incluya un manejo de excepciones que distinga las entradas corregibles de las fallas del sistema. Documente los casos de prueba para que otro desarrollador pueda reproducir tanto los guardados bloqueados como las correcciones exitosas.

  4. LecturaEjercicio de programación con IA · 20 min

    Construye el ejemplo ValidationClinic de este módulo con ChatGPT o Claude a partir de un prompt listo para usar que dirige al modelo a la especificación del módulo, y después revisa, ejecuta y amplía lo que te devuelva — incluso comparándolo con nuestra propia solución de referencia en GitHub.

    Leer la guía de la lección (PDF)

  5. CuestionarioEvaluación de conocimientos — Módulo 7 · 10 min · Nota mínima 80%
  6. Laboratorio prácticoLaboratorio — Proyecto final: el flujo completo de Save · 45 min

    Objetivo: Completa el proyecto final de ValidationClinic. Escribe btnSave_Click como un flujo fijo: restablece el resumen, llama a bindingSource.EndEdit(), detente si ValidateChildren() falla, detente si falla la comprobación de DataAnnotations, detente si ContactValidator devuelve errores de negocio, detente si la cuadrícula de contactos todavía tiene errores de fila y solo entonces guarda dentro de un try/catch que convierta un nombre duplicado en un error de campo y cualquier otra excepción en un mensaje comprensible. Crea SummaryErrorProvider implementando IErrorProvider, asígnalo a validation.ErrorProvider y encamina los errores a través de un método auxiliar SetError que escriba tanto en el ErrorProvider de iconos como en el proveedor de resumen. Prueba valores obligatorios, no válidos, válidos y límite, y escribe un breve README que explique el diseño de la validación. Entregables: Flujo de Save que ejecuta EndEdit, ValidateChildren y las comprobaciones del modelo, de negocio y de la cuadrícula antes de guardar; Clase SummaryErrorProvider que implementa SetError y GetError de IErrorProvider; Método auxiliar SetError que escribe tanto en el ErrorProvider de iconos como en el proveedor de resumen; try/catch alrededor del guardado que separa un error de nombre duplicado de los fallos del sistema; README con el diseño de la validación y casos de prueba para valores obligatorios, no válidos, válidos y límite.