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.

Escrito por un humano, no por una IA