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>
Était-ce utile?

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?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top