我正在使用具有不同本地化的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。
感谢任何帮助或提示。
答案 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中使用下划线而不是连字符。
有点日志啰嗦的回答,但希望这会帮助其他人。