configurações regionais IIS6 e ASP.Net 2 - {0: c} retornando muitas casas decimais em gridview
-
05-09-2019 - |
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>
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?