如何利用Report.CustomCalc事件實(shí)現(xiàn)預(yù)處理輸入數(shù)據(jù)
【點(diǎn)擊下載FastReport .Net v2018.1最新版本】
在評(píng)估對(duì)象中的表達(dá)式或來(lái)自數(shù)據(jù)源的數(shù)據(jù)時(shí),將調(diào)用報(bào)表對(duì)象的 New CustomCalc
事件。所以,我們可以使用這個(gè)事件來(lái)攔截?cái)?shù)據(jù)并將其替換。這種操作什么時(shí)候會(huì)有用呢?比如,在接收到的數(shù)據(jù)中,有必要過(guò)濾數(shù)值或?qū)⑵涮鎿Q為其他行。
我們來(lái)看一個(gè)例子。創(chuàng)建一個(gè)簡(jiǎn)單的WindowsForms應(yīng)用程序,將數(shù)據(jù)源添加到項(xiàng)目和DataSet組件中。另外,我們把報(bào)表組件放在表單上。
在報(bào)表組件的下拉菜單中,選擇“Select Data Source”項(xiàng):
并選擇我們的數(shù)據(jù)源。
現(xiàn)在從同一菜單中選擇“Design Report”項(xiàng)。為了演示,我從Employee表中添加了幾個(gè)字段:
感興趣的人可以看看現(xiàn)在報(bào)表的外觀:
保存報(bào)表并關(guān)閉報(bào)表設(shè)計(jì)器。讓我們?cè)诒韱沃刑砑右粋€(gè)按鈕,以及按鈕點(diǎn)擊事件:
private void Run_Click(object sender, EventArgs e) { report1.Load("D://Reports//Simple.frx"); report1.Prepare(); report1.ShowPrepared(); }
這些都是老生常談了。我上傳了以前創(chuàng)建的報(bào)表,然后加載并顯示它。
現(xiàn)在為report1對(duì)象添加CustomCalc事件:
private void report1_CustomCalc(object sender, FastReport.CustomCalcEventArgs e) { if (e.CalculatedObject.Equals("Roberto") ) { e.CalculatedObject = "Test Name"; } }
在這里,我們攔截所需的數(shù)據(jù)并將其替換。所有數(shù)據(jù)在構(gòu)建報(bào)表期間通過(guò)CalculatedObject對(duì)象傳遞,我們捕捉到我們需要的數(shù)據(jù)“Roberto”,并替換它們。
你可以替換整個(gè)數(shù)據(jù)字段。在這種情況下,條件將如下所示:
if (e.Expression.IndexOf("employee.FirstName") != -1)
我們直接在事件處理句柄CustomCalc中編寫(xiě)數(shù)據(jù)替換的代碼。你也可以直接在代碼中分配事件處理句柄,例如,在MVC應(yīng)用程序中。在應(yīng)用程序代碼中一個(gè)方便的地方我們編寫(xiě):
report1.CustomCalc += FReport_CustomCalc;
以及處理句柄:
private void FReport_CustomCalc(object sender, CustomCalcEventArgs e) { if (e.Expression.IndexOf("Employees.FirstName") != -1) { e.CalculatedObject = "Test Name"; } }
運(yùn)行應(yīng)用程序。點(diǎn)擊按鈕以查看報(bào)表:
讓我們來(lái)比較一下這個(gè)截圖和之前的做法。如你所見(jiàn),員工Roberto的第一個(gè)條目和名字被置于一個(gè)條件中,并被“Test Name”取代。
綜上,我們有辦法替換報(bào)表中的一些數(shù)據(jù),對(duì)于有復(fù)雜報(bào)表需求的用戶來(lái)說(shuō)這會(huì)非常有用。
產(chǎn)品介紹 | 下載試用 | 優(yōu)惠活動(dòng) | | 聯(lián)系Elyn
推薦閱讀
- FastReport VCL報(bào)表控件開(kāi)發(fā)者手冊(cè)
- FastReport Online Designer中文手冊(cè)
- Fastreport.Net教程2016
- Fastreport.Net用戶手冊(cè)
- FastReport.Net教程2017(持續(xù)更新中···)
- FastReport Online Designer教程2017(持續(xù)更新中···)
- 報(bào)表教程2017(持續(xù)更新中···)
- FastReport.Net v2018.1版本更新已經(jīng)發(fā)布!