1. 程式人生 > >【FastReport教程】如何在報表設計器中使用帶有函式的自定義庫

【FastReport教程】如何在報表設計器中使用帶有函式的自定義庫

在報表設計器中的內建函式庫並不是很小,但有時候仍然缺乏一些特定的功能。由於報表中的指令碼,可以輕鬆實現所需的功能。但是,如果許多記錄中需要此功能呢?每次都將它新增到報表指令碼中?當然不是。可以在連線到報表設計器的庫中收集所有需要的函式。需要庫與報表位於同一資料夾中,建立一個類庫專案,將在其中擁有一個測試函式。例如,將陣列轉換為字串的功能,編譯庫:

namespace ArrayToString
{
 public static class UserDefined
 {
 public static string ArrayToString(List<string> parameters)
 {
 return String.Join(",", parameters);
 }
 }
}

現在建立應用程式,將在其中開啟報表生成器並使用我們的庫ArrayToString,這是一個正常的Winforms應用程式。將庫FastReport新增到專案引用:建議將庫儲存在與應用程式的可執行檔案相同的目錄中,所以可以在draft中新增對它的引用。除此之外,庫將被新增到編譯中包含可執行檔案的資料夾中,應用程式中只有表單和按鈕,新增按鈕單擊事件處理程式:

private void RunBtn_Click(object sender, EventArgs e)
 {
 Report report = new Report();
 report.Design();
 }
 

執行該應用程式,然後單擊按鈕,報表設計器將以空報表開頭。在報表屬性中,可以新增指向.net庫的連結。

CustomLib

建立一個簡單的報表模板——產品類別列表:

CustomLib

將文字物件新增到頁尾頁帶。轉到“Script”選項卡,建立一個列表,將在其中新增類別名稱。使用者庫中的函式將列表轉換為一行,在頁面的基礎中顯示該行。所以,建立一個列表:

public class ReportScript
 {
 public List<string> list = new List<string>();
 }

回到報表頁面。對於Data band,建立AfterPrint事件處理程式:

 private void Data1_AfterPrint(object sender, EventArgs e)
 {
 list.Add(((String)Report.GetColumnValue("Categories.CategoryName")));
 }
 

每次顯示band“Data”時都會新增類別的名稱,現在,為Page Footer band中的文字物件新增BeforePrint事件處理程式:

 private void Text1_BeforePrint(object sender, EventArgs e)
 {
 Text1.Text = ArrayToString.UserDefined.ArrayToString(list);
 }
 

為文字物件分配使用者定義函式從先前新增的dll返回的字串。請注意,函式的路徑已滿,包含名稱空間和類名。如果將ArrayToString庫新增到使用中,則可以縮短名稱。現在可以在預覽模式下執行報表,頁面頂部:

CustomLib

在頁面底部:

CustomLib

在一行中獲得了產品類別列表,可以在頁面底部的文字物件中使用以下表達式:

  [ArrayToString.UserDefined.ArrayToString(list)]
  

相當於:

   private void Text1_BeforePrint(object sender, EventArgs e)
 {
 Text1.Text = ArrayToString.UserDefined.ArrayToString(list);
 }

不需要建立事件處理程式,如果要在Web專案中使用自定義庫來生成報表,則需要將其放在bin資料夾中。