Paramètres régionaux IIS6 et ASP.Net 2 - {0: c} retour trop de décimales dans gridview
-
05-09-2019 - |
Question
Je me déplace actuellement mon site web à partir d'un serveur Web existant vers une nouvelle machine.
La nouvelle machine est WIN Sever 2003 en cours d'exécution IIS6. Le site utilise ASP.Net 2.
J'ajouté ce qui suit à la section <system.web>
dans mon fichier machine.config pour obtenir le site et les futurs sites d'utiliser les paramètres régionaux en Afrique du Sud au lieu des paramètres par défaut des États-Unis.
<globalization culture="en-ZA" uiCulture="en-ZA"/>
Cela a principalement travaillé - les symboles monétaires ont changé de $ à R comme ils le devraient, mais j'ai une colonne dans une gridview (un champ lié - le type de DB est de l'argent) qui est défini comme suit:
DataFormatString = "{0: c}"
[Modifier] - ont essayé avec {0: C}, ainsi que par la suggestion de Richard ci-dessous: toujours pas de chance
Ceci revient 10000,0000 au lieu de R 10,000.00 comme il était sur mon ancien serveur.
Toutes les idées sur la façon de résoudre ce problème?
Merci!
[Modifier] -. Je commence à penser que cela n'a rien à voir avec les paramètres de culture réelle
J'ai une autre forme où il fonctionne très bien:
<ItemTemplate>
<asp:Label ID="Label2" runat="server" Text='<%# Bind("Balance", "{0:c}") %>'></asp:Label>
</ItemTemplate>
La forme qui ne fonctionne pas utilise le gridview sans modèle:
<asp:BoundField DataField="Amount" HeaderText="Amount" SortExpression="Amount" DataFormatString="{0:C}" >
<ItemStyle CssClass="al-r" />
</asp:BoundField>
La solution 3
Merci pour votre aide à ce sujet.
Je l'ai résolu ce problème en installant le Service Pack 2 de ASP.Net 2.0 - après le redémarrage, la grille a bien fonctionné avec. {0: C}
Ce problème aurait lui-même fixé dans l'environnement de production, car il sera mis à jour automatiquement. À l'heure actuelle, nous avons le nouveau serveur sur le réseau de bureaux locaux et notre pare-feu semble être limiter les mises à jour.
Leçon apprise: toujours vérifier que tous vos logiciels de serveur est à jour
Autres conseils
essayer champ lié réglage HtmlEncode = "false".
<asp:BoundField DataField="Amount" HeaderText="Amount" SortExpression="Amount" DataFormatString="{0:C}" HtmlEncode="false">
<ItemStyle CssClass="al-r" />
</asp:BoundField>
MSDN montre un C majuscule pour la monnaie, pas minuscules.
(Le formatage des spécificateurs sont sensibles à la casse.)
Mise à jour:. Maintenant, testez les choses ici
Code:
class Program {
static void Main(string[] args) {
decimal val = 1234567.89M;
using (var file = new FileStream(args[0], FileMode.Create, FileAccess.Write))
using (var output = new StreamWriter(file, Encoding.UTF8)) {
output.WriteLine("Thread culture: " + Thread.CurrentThread.CurrentCulture.Name);
output.WriteLine("Thread UI culture: " + Thread.CurrentThread.CurrentUICulture.Name);
var cultures = new[] { "en-US", "en-GB", "af-ZA", "fr-FR", "fr-CA" };
foreach (var culture in cultures) {
var ci = new CultureInfo(culture);
output.WriteLine(String.Format(ci, "{0,-10}: {1:C}", ci.Name, val));
}
}
}
}
donne une sortie:
Thread culture: en-GB Thread UI culture: en-US en-US : $1,234,567.89 en-GB : £1,234,567.89 af-ZA : R 1,234,567.89 fr-FR : 1 234 567,89 € fr-CA : 1 234 567,89 $
Ce qui a l'air OK pour moi.
Comment vous définissez la culture?