?id=c674fa3d-ae3e-4e4d-88ff-b93f09a78e78
Campos ReadOnly y InsertVisible en edición de datos con controles enlazados Web Forms
por José M. Alarcón
En las rejillas (y en realidad en cualquier control enlazado a datos de ASP.NET Web Forms) es posible marcar algunos campos como de solo lectura estableciendo como verdadera su propiedad ReadOnly.
Si establecemos un campo como ReadOnly, a la hora de editarlo se comporta como una etiqueta, es decir, se muestra de la misma manera tanto en modo visualización como en modo edición, normalmente en forma de etiqueta de texto que muestra el contenido del campo. Si se trata de una plantilla, ya no tendremos la propiedad ReadOnly y tendremos que sustituir el TextBox por defecto para edición por una etiqueta o similar en el caso de la plantilla de edición de registros, pero esto es otra historia.
Bien, la cuestión es que este comportamiento tiene un efecto secundario que puede causarnos algunos problemas (o al menos despistarnos un poco según lo que esperemos) y es que los campos ReadOnly no se envían al servidor durante las inserciones y actualizaciones.
Es decir, a todos los efectos es como si no existieran para la edición, por lo que si estamos insertando un registro nuevo y no se admiten valores nulos en el campo de solo lectura tendremos que tener en cuenta esta particularidad y gestionarla. No debería suponer un problema en el caso de las actualizaciones ya que el valor del campo no se modifica y, aunque no se admitan nulos, dado que el registro ya existe nos estamos asegurando por definición que no va a ser nulo. Esto es así, claro, si estamos gestionando correctamente la edición de los datos y no tratamos de recoger el valor del campo de solo lectura y enviarlo (se nos puede escapar y lo enviaríamos nulo al no ser enviado al servidor durante el postback). Este problema se da típicamente cuando hemos incluido el campo como uno más en la consulta de actualización, y luego sin embargo marcamos el campo correspondiente del control enlazado como de sólo lectura.
Existe otra propiedad que se llama InsertVisible (ver la figura anterior, un poco más arriba) que sirve para indicar si el campo será visible o no durante la inserción. Si la ponemos a False desaparecerá el campo y con él el posible problema. Se suele usar con campos como autonuméricos y similares que no tienen sentido durante una inserción, pero si puede tener sentido mostrarlos como sólo lectura durante la edición, de ahí la existencia de las dos propiedades, que puede ser algo confusa.
Es una pequeña particularidad pero que a más de uno le puede causar quebraderos de cabeza y que, si te ocurre, no es nada fácil de descubrir.
¡Espero que te sea útil!
José Manuel Alarcón Aguín
Fundador de
campusMVP.es, el
proyecto de referencia en formación on-line para programadores en lengua española.
Autor de varios libros y cientos de artículos. Galardonado como
MVP de Microsoft desde 2004. Gallego de Vigo, amante de la ciencia y la
tecnología, la música y la lectura. Ayudando a la gente en Internet desde 1996.