DataFormatString che non viene applicato

Se stai cercando una risposta al perchè il settaggio della proprietà DataFormatString non viene preso in considerazione da un BoundField, la risposta più corretta è “questo è un bug”. Un bug che per il quale nessuno alla Microsoft vuole prendersi la responsabilità.

In poche parole, se si ha un BoundField di tipo DateTime (o in generale un BoundField che necessita di essere formattato secondo una particolare forma) si deve utilizzare la proprietà DataFormatString in questo modo:

Ma, sfortunatamente, quando si esegue l’applicazione, l’output invece di essere una stringa di tipo data formattata come richiesto (MM/dd/yyyy), sarà una stringa apparentemente dello stesso tipo che si ottiene invocando il metodo ToString():

07/02/2007 7:35:54 PM

Il problema è riconducibile allo sforzo fatto da Microsoft nel cercare di prevenire i così detti attacchi cross site scripting; per questa ragione i BoundField vengono prima dati in pasto alla funzione di econding HtmlEncode e poi passati alla DataFormatString, che però non ritrovandosi più una data valida non potrà procedere oltre con la formattazione.

La soluzione è in questo caso quella di impostare la proprietà HtmlEncode = false come nell’esempio qui sotto.

Technorati Tags: ,