天天看點

如何在 FastReport中建立波斯曆?

FastReport .Net是适用于Windows Forms,ASP.NET,MVC和.NET Core的全功能報表解決方案。它可以在Microsoft Visual Studio 2005-2019中使用。支援.Net Framework 2.0-4.x,.NET Core 3.0及以上版本。

在FastReport .NET 2021.3的新版本在示範應用程式中實作了HiDPI支援。添加了用于嵌入Blazor Server應用程式的Razor元件。XODT和XODS有新的出口。FastReport OpenSource版本現在可以導入DevExpress,List和Label以及SQL Server Reporting Services報表。(點選下方按鈕下載下傳)

你知道不同的國家有不同的日期格式嗎?當您制作多語言報告或針對他們說波斯語(波斯語)的國家/地區進行報告時,以正确的格式顯示日期很重要。預設情況下,FastReport 使用歐洲日期格式,但 .NET 工具允許将其轉換為不同的格式。

是以,我們的任務是将日期轉換為波斯格式。例如,我們的報告有一個表達式 [Date],表示今天的日期:

表達式[Date]以DateTime格式擷取目前系統日期,但所有處理後的文本報告的值是String。讓我們在報告腳本中建立一個新函數:

private void ConvertToPersianDate(object sender, EventArgs e)

我們将從文本對象中喚起這個功能。我們建立一個臨時變量,它将對象的文本轉換為 DateTime:

DateTime d = DateTime.Parse((sender as TextObject).Text);

“sender as TextObject”是調用函數的對象的位址。如果我們以這種方式處理它,我們就可以使用它的功能和屬性。

之後,我們将需要 PersianCalendar 對象,它将日期轉換為波斯語格式:

PersianCalendar pc = new PersianCalendar ( ) ;

請注意,此對象存儲在 System.Globalization 庫中,并且必須在“使用”部分中指明。

然後我們必須更改對象的文本。更詳細地考慮這一行:

(sender as TextObject).Text = string.Format("{0}/{1}/{2}", pc.GetYear(d), pc.GetMonth(d), pc.GetDayOfMonth(d));      

在這裡我們設定對象的文本。該值的格式為年/月/日,因為我們使用 PersianCalendar 的函數來擷取相應的值。可以根據需要編輯設定文本的代碼部分。例如,day.month.year 格式的日期代碼如下所示:

“{0}.{1}.{2}”, pc.GetDayOfMonth(d), pc.GetMonth(d), pc.GetYear(d)

結果,我們得到以下函數:

using System.Globalization;
 namespace FastReport
 {
 public class ReportScript
 {
 private void ConvertToPersianDate(object sender, EventArgs e)
 {
 // Converting to DateTime format
 DateTime d = DateTime.Parse((sender as TextObject).Text);// Creating an object for conversion
 PersianCalendar pc = new PersianCalendar();// Creating a string using PersianCalendar
 // It is possible to change the string template
 (sender as TextObject).Text = string.Format("{0}/{1}/{2}", pc.GetYear(d), pc.GetMonth(d), pc.GetDayOfMonth(d));
 }
 }
 }      

将該函數添加到相關對象的 AfterData 事件中。

如何在 FastReport中建立波斯曆?

現在日期看起來像這樣:

如何在 FastReport中建立波斯曆?

其他與時間相關的功能可以參考下表:

GetDayOfWeek(), Day of week

GetMonth(), Month

GetDayOfMonth(), Day of month

GetYear(), Year

GetHour() Hour

GetMinute() Minute

GetSecond() Second

繼續閱讀