【FastReport教程】如何在報(bào)表設(shè)計(jì)器中使用帶有函數(shù)的自定義庫(kù)
【下載FastReport.Net最新版本】
在報(bào)表設(shè)計(jì)器中的內(nèi)置函數(shù)庫(kù)并不是很小,但有時(shí)候仍然缺乏一些特定的功能。由于報(bào)表中的腳本,可以輕松實(shí)現(xiàn)所需的功能。但是,如果許多記錄中需要此功能呢?每次都將它添加到報(bào)表腳本中?當(dāng)然不是??梢栽谶B接到報(bào)表設(shè)計(jì)器的庫(kù)中收集所有需要的函數(shù)。需要庫(kù)與報(bào)表位于同一文件夾中,創(chuàng)建一個(gè)類庫(kù)項(xiàng)目,將在其中擁有一個(gè)測(cè)試函數(shù)。例如,將數(shù)組轉(zhuǎn)換為字符串的功能,編譯庫(kù):
namespace ArrayToString { public static class UserDefined { public static string ArrayToString(List<string> parameters) { return String.Join(",", parameters); } } }
現(xiàn)在創(chuàng)建應(yīng)用程序,將在其中打開報(bào)表生成器并使用我們的庫(kù)ArrayToString,這是一個(gè)正常的Winforms應(yīng)用程序。將庫(kù)FastReport添加到項(xiàng)目引用:建議將庫(kù)存儲(chǔ)在與應(yīng)用程序的可執(zhí)行文件相同的目錄中,所以可以在draft中添加對(duì)它的引用。除此之外,庫(kù)將被添加到編譯中包含可執(zhí)行文件的文件夾中,應(yīng)用程序中只有表單和按鈕,添加按鈕單擊事件處理程序:
private void RunBtn_Click(object sender, EventArgs e) { Report report = new Report(); report.Design(); }
運(yùn)行該應(yīng)用程序,然后單擊按鈕,報(bào)表設(shè)計(jì)器將以空?qǐng)?bào)表開頭。在報(bào)表屬性中,可以添加指向.net庫(kù)的鏈接。
創(chuàng)建一個(gè)簡(jiǎn)單的報(bào)表模板——產(chǎn)品類別列表:
將文本對(duì)象添加到頁(yè)腳頁(yè)帶。轉(zhuǎn)到“Script”選項(xiàng)卡,創(chuàng)建一個(gè)列表,將在其中添加類別名稱。用戶庫(kù)中的函數(shù)將列表轉(zhuǎn)換為一行,在頁(yè)面的基礎(chǔ)中顯示該行。所以,創(chuàng)建一個(gè)列表:
public class ReportScript { public List<string> list = new List<string>(); }
回到報(bào)表頁(yè)面。對(duì)于Data band,創(chuàng)建AfterPrint事件處理程序:
private void Data1_AfterPrint(object sender, EventArgs e) { list.Add(((String)Report.GetColumnValue("Categories.CategoryName"))); }
每次顯示band“Data”時(shí)都會(huì)添加類別的名稱,現(xiàn)在,為Page Footer band中的文本對(duì)象添加BeforePrint事件處理程序:
private void Text1_BeforePrint(object sender, EventArgs e) { Text1.Text = ArrayToString.UserDefined.ArrayToString(list); }
為文本對(duì)象分配用戶定義函數(shù)從先前添加的dll返回的字符串。請(qǐng)注意,函數(shù)的路徑已滿,包含命名空間和類名。如果將ArrayToString庫(kù)添加到使用中,則可以縮短名稱?,F(xiàn)在可以在預(yù)覽模式下運(yùn)行報(bào)表,頁(yè)面頂部:
在頁(yè)面底部:
在一行中獲得了產(chǎn)品類別列表,可以在頁(yè)面底部的文本對(duì)象中使用以下表達(dá)式:
[ArrayToString.UserDefined.ArrayToString(list)]
相當(dāng)于:
private void Text1_BeforePrint(object sender, EventArgs e) { Text1.Text = ArrayToString.UserDefined.ArrayToString(list); }
不需要?jiǎng)?chuàng)建事件處理程序,如果要在Web項(xiàng)目中使用自定義庫(kù)來(lái)生成報(bào)表,則需要將其放在bin文件夾中。