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