Crystal Reports本地化不会更改货币符号

时间:2011-10-17 15:28:43

标签: localization crystal-reports

我正在使用具有不同本地化的Crystal Reports导出。对于这个例子,我试图将本地化设置为使用欧元的法语。

我使用以下C#代码设置本地化:

    ReportDocument report = new ReportDocument();

    report.ReportClientDocument.LocaleID = CrystalDecisions.ReportAppServer.DataDefModel.CeLocale.ceLocaleFrench;
    report.ReportClientDocument.PreferredViewingLocaleID = CrystalDecisions.ReportAppServer.DataDefModel.CeLocale.ceLocaleFrench;
    report.ReportClientDocument.ProductLocaleID = CrystalDecisions.ReportAppServer.DataDefModel.CeLocale.ceLocaleFrench;

导出报告时,将显示以下值:

135,00 $

请注意,数字的格式已正确更改,但货币符号未更改。

我一直在寻找解决方案,但几乎所有事情都集中在设计时更改货币,但我需要能够在运行时根据用户选择的其他值更改它。

我已经看到一些关于使用参数传递值并在设计器中使用公式的提示,但我对Crystal Reports不太熟悉,无法弄明白。

我正在使用Crystal Reports 10.5和Visual Studio 2010以及.Net 3.5。

感谢任何帮助或提示。

1 个答案:

答案 0 :(得分:3)

我想出来并根据我所做的研究,我认为这是唯一的方法。

我非常确定该符号并非故意改变。遵循报告仅用于一种货币的逻辑,即使格式随文化而变化,实际货币值也是相同的。无论报告的语言是什么,100美元总是100美元,这样,报告不必担心将数据转换为不同数量。

在我的应用程序中,数据仅存储为数字,货币由数据库中的其他值和代码确定。

但为了达到目的,我根据问题中的代码指定了报告的区域设置。然后要更改货币,符号我必须进入报表设计器并格式化货币问题。

在'数字'格式编辑器的选项卡,确保显示货币符号'框已选中。然后点击'自定义'按钮和货币符号'标签。转到公式工作室获取货币符号,然后输入以下代码:

Local StringVar locale := LowerCase(ContentLocale);
if locale = "fr_fr" then
    "€"
else if (locale = "en_gb") then 
    "£"
else if(locale = "en_us" OR locale = "en_ca") then
    "$"
else
    ""

这只是我现在所支持的语言的一个例子,但我认为它得到了重点。另请注意,Crystal在区域设置ID中使用下划线而不是连字符。

有点日志啰嗦的回答,但希望这会帮助其他人。