Dans un GridView, on a la possibilité de formater le contenu d'un BoundField avec un pattern équivalent à ceux utilisés par String.Format(). C'est donc ce que j'ai voulu faire, en formatant une de mes colonnes contenant un prix pour qu'elle s'affiche joliment, avec un séparateur des milliers et la monnaie :

<asp:BoundField DataField="Price" DataFormatString="CHF {0:0,0}" SortExpression="Price" />


Mais le problème, c'est que ça ne fonctionne pas : le "CHF" est bien affiché, mais aucun séparateur des milliers ! Cela vient du fait que pour éviter l'injection de code, ASP.Net encode en HTML tous les champs avant de les afficher, et avant de les formatter ! Je ne sais pas pourquoi, mais cela semble le rendre incapable de séparer les milliers. Pour résoudre le problème, il suffit donc de désactiver l'encodage HTML de ce champ, si vous êtes sûr de ne rien risquer (dans mon cas, c'est un int qui vient directement de ma base de données, peu de risques d'injection donc ;-)...), en ajoutant l'attribut HtmlEncode="false" :

<asp:BoundField DataField="Price" DataFormatString="CHF {0:0,0}" HtmlEncode="false" SortExpression="Price" />