Controles GridView que rompen con el nuevo Service Pack 1 para .NET 2.0 y .NET 3.5, y nueva propiedad de campos enlazados

Recientemente instalé el nuevo Service Pack 1 para .NET 2.0 (y .NET 3.5) en un servidor de producción. De repente la aplicación empezó a producir resultados inexplicables en unas rejillas de la aplicación de un cliente. De hecho desaparecían multitud de registros de éstas, aunque las consultas de las que dependían se seguían realizando sin problemas. Era un problema bastante raro y pensamos en un bug del SP1.


El caso es que fué una combinación de un error nuestro y un cambio de comportamiento en el SP1 de .NET 2.0. Lo explico porque puede interesarle a bastante gente.


De hecho este problema tiene mucho que ver con otro que ya ocmenté en este blog hace unos meses sobre el formato de fechas en los campos enlazados de una rejilla. En ese post además mostraba el código fuente de .NET que involucraba a este problema.


En el SP1 han cambiado ligeramente el comportamiento del enlazado a datos de campos DataBound en rejillas.


El caso es que el programador de nuestra aplicaicón había puesto en la rejilla un formato erróneo en dos campos almacenados como cadenas en la BD, colocando esto en la propiedad DataFormatString:



«{0:d}»


Esto es un formato no válido para un dato de tipo String, que es lo que se guarda en la base de datos. El formato “D” usado aquí es sólo aplicable a Enteros (lo pone bien claro la documentación de .NET), y el correcto sería por ejemplo “F”. Por lo tanto el problema se solucionaba cambiando la cadena de formato de la rejilla a, por ejemplo:



«{0:F2}»


De este modo se formatea como un número decimal en coma flotante con dos decimales, que es lo que nos interesaba.


En la versión anterior previa al SP1, de hecho no se estaba aplicando el formato en absoluto y por eso no rompía (consulta el código del post relacionado que menciono arriba) ya que la propiedad HtmlEncode es true por defecto. En el SP1 han cambiado este código y ahora sí que se aplica antes del formato de cadena.


De hecho han introducido una propiedad nueva llamada HtmlEncodeFormatString que por defecto vale true y que nos ayuda a controlar este aspecto.


Espero que esto le pueda ayudar a más gente.


Saludos


JM.

Sin categoría

2 thoughts on “Controles GridView que rompen con el nuevo Service Pack 1 para .NET 2.0 y .NET 3.5, y nueva propiedad de campos enlazados

  1. Son SP para .NET, no para Visual Studio.

    De todos modos con VS2008 viene .NET 3.5, la cual consta de los famosos bits rojos, verdes, etc… Lo que en cristiano quiere decir que la plataforma .NET 3.5 contiene a la 2.0 por lo que si tienes .NET 3.5 deberás instalar el SP1 de la 2.0 también, aunque ya lo hará Windows Update por ti automáticamente.

    Saludos

    JM.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *