我正在使用具有不同本地化版本的 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 结合使用。
感谢任何帮助或提示。
最佳答案
我想通了,并且根据我所做的研究,我认为这是唯一的方法。
我很确定该符号不会故意更改。按照报表仅用于一种货币的逻辑,即使格式会随文化而变化,实际的货币值是相同的。无论使用哪种语言查看报告,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 中使用下划线而不是连字符。
有点啰嗦的答案,但希望这对其他人有帮助。
关于localization - Crystal Reports 本地化不会改变货币符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7796006/