2011-10-17 29 views
2

我正在使用具有不同本地化的Crystal Reports導出。對於這個例子,我試圖將本地化設置爲使用歐元的法語。Crystal Reports Localaization不會更改貨幣符號

我設置與下面的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不太熟悉。

我在Visual Studio 2010和.Net 3.5中使用了Crystal Reports 10.5。

任何幫助或技巧值得讚賞。

回答

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中使用下劃線而不是連字符。

一種日誌蜿蜒的答案,但希望這會幫助別人。