configurações regionais IIS6 e ASP.Net 2 - {0: c} retornando muitas casas decimais em gridview

StackOverflow https://stackoverflow.com/questions/577543

Pergunta

Atualmente, estou movendo meu site a partir de um servidor da Web existente para uma máquina nova.

A nova máquina é WIN Sever 2003 executando IIS6. O site está usando ASP.Net 2.

Eu adicionei o seguinte para a seção <system.web> no meu arquivo machine.config para obter o site e sites futuras para usar Sul-Africano configurações regionais em vez das configurações padrão dos EUA.

<globalization culture="en-ZA" uiCulture="en-ZA"/>

Isto trabalhou principalmente - os símbolos de moeda mudaram de US $ para R como deveriam, mas eu tenho uma coluna em um gridview (a campo acoplado - o tipo DB é dinheiro) que é definido da seguinte forma:

DataFormatString = "{0: c}"

[Edit] - tentei isso com {0: C}, bem como por sugestão de Richard abaixo: ainda não sorte

Isso ainda está retornando 10000.0000 em vez de R $ 10.000,00 como era no meu servidor de idade.

Todas as ideias sobre a forma de corrigir isso?

Obrigado!

[Edit] -. Estou começando a pensar que isso tem pouco a ver com as configurações de cultura real

Eu tenho um outro formulário onde ele funciona bem:

<ItemTemplate>
    <asp:Label ID="Label2" runat="server" Text='<%# Bind("Balance", "{0:c}") %>'></asp:Label>
</ItemTemplate>

A forma que não funciona usa o gridview sem um modelo:

<asp:BoundField DataField="Amount" HeaderText="Amount" SortExpression="Amount" DataFormatString="{0:C}" >
    <ItemStyle CssClass="al-r" />
</asp:BoundField>
Foi útil?

Solução 3

obrigado pela sua ajuda com isso.

Eu resolvi esse problema instalando o Service Pack 2 do ASP.Net 2.0 - após o reinício, a grade funcionou bem com {0: C}

.

Este problema teria se fixou no ambiente de produção, uma vez que será definido para atualizar automaticamente. Atualmente, temos o novo servidor na rede do escritório local e nosso firewall parece estar restringindo as atualizações.

Lição aprendida: sempre se certificar de que todo o software do servidor está atualizado

Outras dicas

Em sua configuração tentativa campo acoplado HtmlEncode = "false".

<asp:BoundField DataField="Amount" HeaderText="Amount" SortExpression="Amount" DataFormatString="{0:C}" HtmlEncode="false">
    <ItemStyle CssClass="al-r" />
</asp:BoundField>

MSDN mostra um capital C para a moeda, caso não menor.

(especificadores de formatação são maiúsculas de minúsculas.)


Update:. Agora teste coisas aqui

Código:

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));
            }
        }
    }
}

Dá saída:

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 $

O que parece OK para mim.

Como você está definindo a cultura?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top