lunes, 27 de agosto de 2007

Dar formato a la fecha en un GridView: DataFormatString y HtmlEncode...

A veces nos podemos encontrar con que necesitamos que el formato en que se muestra una fecha en un GridView sea el que nosotros queramos.
Esto se puede solucionar de forma sencilla. Simplemente tenemos que establecer la propiedad DataFormatString al formato de fecha que queremos que se muestre.
Por ejemplo, si queremos que sólo se muestren el día, el mes y el año de una fecha, tendríamos que establecer dicha propiedad a:
dataformatstring="{0:MM/dd/yyyy}"
Sencillo, no? Pues con eso no es suficiente!
Comom podéis leer en este post del blog de Peter Kellner, para que el formato se aplique de verdad en la columna del GridView, tenemos que modificar el valor por defecto de otra propiedad del campo del GridView en cuestión. Esta propiedad es htmlencode y el valor al que la tenemos que poner es a "false". Es decir:
htmlencode="false"
¿Y para que sirve la propiedad "HtmlEncode"? Pues evita los ataques del tipo "cross-site scripting" y que se muestre contenido malicioso. Por eso Microsoft recomienda que siempre que se pueda se encuentre a "true".

Si es así, está claro, no? Bueno, la explicación sencilla viene ahora. Según nos explica muy bien Peter Keller, es que esta si esta propiedad se encuentra activa, no se puede pasar información al campo enlazado (boundfield) del control.
Ahora sí, no?

En fin, el código final de la columna del GridView será:
<asp :BoundField DataField=“Fecha”
DataFormatString=“{0:M-dd-yyyy}”
HeaderText=“Fecha” />
Cómo podéis ver es sencillo.
Sólo por mencionarlo, Peter Keller nos da otra solución, que es hacer que la columna sea una plantilla (con una etiqueta o un campo de texto) y establecer el formato directamente sobre dicha etiqueta o campo de texto.
En su post podéis encontrar un ejemplo.

Como siempre espero que os haya servido de ayuda.

Un saludo!

3 comentarios:

Anónimo dijo...

Correcto !

Anónimo dijo...

Gracias funciona al 100%

Anónimo dijo...

Muchas gracias..