Anteriormente mostré cómo utilizar el control DataForm, explicando de que manera podemos asociarle información y cuales son las propiedades que podemos utilizar. Puede ver el post aquÃ.
Ahora voy a mostrar dos cuestiones importantes, la primera es cómo implementar IEditableObject, para poder agregar lógica y además como agregarle validaciones a los campos del formulario.
Vamos a tomar el ejemplo del post anterior, o sea reutilizamos el XAML y la parte donde enlazamos los datos al formulario.
IMPLEMENTADO IEDITABLEOBJECT
Si necesitamos agregar lógica en las operaciones de edición, grabado de los datos, podemos utilizar la interfaz IEditableObject, que nos da la posibilidad de utilizar tres eventos BeginEdit(), CancelEdit(), EndEdit(), donde vamos a agregar nuestra lógica.
Nuestra clase quedarÃa de la siguiente manera
|
1 |
<span style="color: #0000ff">public</span> <span style="color: #0000ff">class</span> Disco : IEditableObject |
|
1 |
{ |
|
1 |
<span style="color: #0000ff">public</span> <span style="color: #0000ff">int</span> DiscoID { get; set; } |
|
1 |
<span style="color: #0000ff">public</span> DateTime FechaAlta { get; set; } |
|
1 |
<span style="color: #0000ff">public</span> <span style="color: #0000ff">string</span> Nombre { get; set; } |
|
1 |
<span style="color: #0000ff">public</span> <span style="color: #0000ff">string</span> Banda { get; set; } |
|
1 |
<span style="color: #0000ff">public</span> Generos Genero { get; set; } |
|
1 |
<span style="color: #0000ff">public</span> <span style="color: #0000ff">int</span> Anio { get; set; } |
|
1 |
  |
|
1 |
<span style="color: #cc6633">#region</span> IEditableObject Members |
|
1 |
<span style="color: #0000ff">public</span> <span style="color: #0000ff">void</span> BeginEdit() |
|
1 |
{ |
|
1 |
<span style="color: #008000">// Va a empezar a editar</span> |
|
1 |
} |
|
1 |
  |
|
1 |
<span style="color: #0000ff">public</span> <span style="color: #0000ff">void</span> CancelEdit() |
|
1 |
{ |
|
1 |
<span style="color: #008000">// Cancelo la edición</span> |
|
1 |
} |
|
1 |
  |
|
1 |
<span style="color: #0000ff">public</span> <span style="color: #0000ff">void</span> EndEdit() |
|
1 |
{ |
|
1 |
<span style="color: #008000">// Terminó la edición</span> |
|
1 |
} |
|
1 |
<span style="color: #cc6633">#endregion</span> |
|
1 |
} |
Dentro de las funciones podemos agregar la funcionalidad que necesitemos, cómo cancelar la edición o lo que necesitemos.
OPCIONES PARA MOSTRAR CAMPOS
Primero vamos a agregar las referencias necesarias
- System.ComponentModel
- System.ComponentModel.DataAnnotations
Otra opción interesante, es que tÃtulo aparece al lado del campo, si podemos agregar una ayuda para saber que se esta cargando.
Para esto vamos a utilizar el atributo Display.
|
1 |
<span style="color: #0000ff">public</span> <span style="color: #0000ff">int</span> DiscoID { get; set; } |
|
1 |
  |
|
1 |
[Display(Name=<span style="color: #006080">"Fecha de Alta"</span>, |
|
1 |
Description = <span style="color: #006080">"Fecha de alta del registro"</span>, |
|
1 |
Order = 6)] |
|
1 |
<span style="color: #0000ff">public</span> DateTime FechaAlta { get; set; } |
|
1 |
  |
|
1 |
[Display(Name = <span style="color: #006080">"Albúm"</span>, |
|
1 |
Description = <span style="color: #006080">"Ingrese el nombre del albúm"</span>)] |
|
1 |
<span style="color: #0000ff">public</span> <span style="color: #0000ff">string</span> Nombre { get; set; } |
|
1 |
  |
|
1 |
[Display(Name = <span style="color: #006080">"Banda"</span>, |
|
1 |
Description = <span style="color: #006080">"Ingrese el nombre del intérprete"</span>)] |
|
1 |
<span style="color: #0000ff">public</span> <span style="color: #0000ff">string</span> Banda { get; set; } |
|
1 |
  |
|
1 |
[Display(Name = <span style="color: #006080">"Género"</span>, |
|
1 |
Description = <span style="color: #006080">"Ingrese el género del albúm"</span>)] |
|
1 |
<span style="color: #0000ff">public</span> Generos Genero { get; set; } |
|
1 |
  |
|
1 |
[Display(Name = <span style="color: #006080">"Año"</span>, |
|
1 |
Description = <span style="color: #006080">"Ingrese el año de lanzamiento"</span>)] |
|
1 |
<span style="color: #0000ff">public</span> <span style="color: #0000ff">int</span> Anio { get; set; } |
Vemos que la propiedad Name define el texto que identifica al campo, antes nos mostraba el nombre de la propiedad, que no refleja con exactitud lo que queremos mostrar.
La propiedad Description nos define el texto de ayuda que va a mostrarse, recuerden que el control DataForm tiene una propiedad llamada DescriptionViewerPosition que nos indica donde va a poner el botón que muestra esta información.
La propiedad Order nos permite ordenar los campos.
VALIDACIONES
Si tenemos la necesidad de validar el texto cargado podemos hacerlo agregando algunos atributos como son Required, Range, RegularExpression.
|
1 |
<span style="color: #0000ff">public</span> <span style="color: #0000ff">int</span> DiscoID { get; set; } |
|
1 |
  |
|
1 |
[Display(Name=<span style="color: #006080">"Fecha de Alta"</span>, |
|
1 |
Description = <span style="color: #006080">"Fecha de alta del registro"</span>, |
|
1 |
Order = 6)] |
|
1 |
<span style="color: #0000ff">public</span> DateTime FechaAlta { get; set; } |
|
1 |
  |
|
1 |
[Display(Name = <span style="color: #006080">"Albúm"</span>, |
|
1 |
Description = <span style="color: #006080">"Ingrese el nombre del albúm"</span>)] |
|
1 |
[Required(ErrorMessage = <span style="color: #006080">"El albúm no puede ser vacÃo"</span>)] |
|
1 |
<span style="color: #0000ff">public</span> <span style="color: #0000ff">string</span> Nombre { get; set; } |
|
1 |
  |
|
1 |
[Display(Name = <span style="color: #006080">"Banda"</span>, |
|
1 |
Description = <span style="color: #006080">"Ingrese el nombre del intérprete"</span>)] |
|
1 |
[Required(ErrorMessage = <span style="color: #006080">"El intérprete no puede ser vacÃo"</span>)] |
|
1 |
<span style="color: #0000ff">public</span> <span style="color: #0000ff">string</span> Banda { get; set; } |
|
1 |
  |
|
1 |
[Display(Name = <span style="color: #006080">"Género"</span>, |
|
1 |
Description = <span style="color: #006080">"Ingrese el género del albúm"</span>)] |
|
1 |
<span style="color: #0000ff">public</span> Generos Genero { get; set; } |
|
1 |
  |
|
1 |
[Display(Name = <span style="color: #006080">"Año"</span>, |
|
1 |
Description = <span style="color: #006080">"Ingrese el año de lanzamiento"</span>)] |
|
1 |
[Range(1950, 2009, ErrorMessage = <span style="color: #006080">"El año no es válido"</span>)] |
|
1 |
<span style="color: #0000ff">public</span> <span style="color: #0000ff">int</span> Anio { get; set; } |
De esta manera vamos agregando las validaciones que queremos. Estas se mostrarán en un sumario de errores que tiene el control.
Pueden descargar el proyecto aquÃ.




5 comments
Alejandro says:
Mar 16, 2010
Hay alguna manera de realizar las validaciones sin utilizar el control dataForm???
Arturo Molina says:
Mar 17, 2010
Qué tal Alendro, si, puedes usar la clase System.ComponentModel.DataAnnotations.Validator y validar propiedades en su método set. Para explicarlo a detalle, te prometo un post al respecto próximamente.
seba says:
May 6, 2010
se puede “ocultar” un atributo en el form?, por ejemplo tener una variable con su getter y setter respectivo pero que no aparezca en el dataform?
Arturo Molina says:
May 7, 2010
Hola Seba, puedes decorar tu propiedad con este atributo:
[Display(AutoGenerateField= false)]
Eso deberia hacer que no aparezca en la forma.
Saludos
Fernando says:
Feb 24, 2011
Holas segui el tutorial paso a paso y me resulto las validaciones pero en el campo donde se muestran los errores solo me sale el nombre del campo y formato de entrada no es correcto, y no asigna el ErrorMessage que asigno..:S alguna idea del por que.???
estoy usando silverlight con el Framework 4 gracias.:D