0

我目前正在将我的网站从现有的 Web 服务器移动到新机器上。

新机器是WIN Sever 2003,运行IIS6。该站点使用 ASP.Net 2。

我在 machine.config 文件的部分中添加了以下内容,<system.web>以使网站和任何未来的网站都使用南非区域设置而不是默认的美国设置。

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

这主要是有效的 - 货币符号已经从 $ 更改为 R,但我在 gridview 中有一个列(绑定字段 - 数据库类型是货币),设置如下:

DataFormatString="{0:c}"

[编辑] - 已尝试使用 {0:C} 以及以下理查德的建议:仍然没有运气

这仍然返回 10000.0000 而不是 R 10,000.00,因为它在我的旧服务器上。

关于如何解决这个问题的任何想法?

谢谢!

[编辑] - 我开始认为这与实际的文化设置无关。

我有另一种形式可以正常工作:

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

不起作用的表单使用没有模板的gridview:

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

3 回答 3

1

在您的绑定字段上尝试设置 HtmlEncode="false"。

<asp:BoundField DataField="Amount" HeaderText="Amount" SortExpression="Amount" DataFormatString="{0:C}" HtmlEncode="false">
    <ItemStyle CssClass="al-r" />
</asp:BoundField>
于 2009-02-23T14:33:40.650 回答
0

MSDN 显示货币的大写 C,而不是小写。

(格式说明符区分大小写。)


更新:现在在这里测试一下。

代码:

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

给出输出:

线程文化:en-GB
线程 UI 文化:en-US
美国:1,234,567.89 美元
英文:£1,234,567.89
af-ZA:R 1,234,567.89
FR-FR : 1 234 567,89 €
法国-CA : 1 234 567,89 $

这对我来说看起来不错。

你是如何设置文化的?

于 2009-02-23T13:02:24.097 回答
0

感谢您对此的帮助。

我通过安装 ASP.Net 2.0 的 Service Pack 2 解决了这个问题 - 重新启动后,网格在 {0:C} 上运行良好。

此问题将在生产环境中自行修复,因为它将被设置为自动更新。目前我们在本地办公网络上有新服务器,我们的防火墙似乎限制了更新。

经验教训:始终确保所有服务器软件都是最新的!

于 2009-02-23T15:18:01.993 回答