如何在一個(gè)WebReport對象中加入多個(gè)報(bào)表
FastReport.Net中的Web報(bào)表發(fā)展迅猛,它廣受歡迎,并且很符合現(xiàn)在開發(fā)潮流和趨勢。而最近它有了一個(gè)新的功能——標(biāo)簽,即允許你在網(wǎng)頁報(bào)表工具欄上創(chuàng)建標(biāo)簽。這些標(biāo)簽允許你在同一個(gè)窗口中打開其他報(bào)表。這樣的解決方案可以方便地輸出一系列相似主題或相關(guān)背景的報(bào)表。它看起來長這樣:
標(biāo)簽呈現(xiàn)為按鈕樣式。當(dāng)選擇標(biāo)簽時(shí),我們可以在同一個(gè)窗口中運(yùn)行報(bào)表。也就是說,現(xiàn)在不需要每個(gè)報(bào)表都單獨(dú)顯示在不同的WebReport對象中。這將有助于節(jié)省頁面空間,并避免網(wǎng)站擁堵。
我們來看一個(gè)這個(gè)如何實(shí)現(xiàn)該功能的例子。我使用的是MVC web項(xiàng)目。
我們將FastReport庫添加到項(xiàng)目中:
· FastReport.dll;
· FastReport.Web.dll。
你可以在FastReport.Net應(yīng)用程序的文件夾中找到它們。
在控制器中主頁創(chuàng)建:報(bào)表對象、數(shù)據(jù)源和標(biāo)簽的實(shí)例??偠灾?,這里所有的邏輯。
然后對庫作出聲明:
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using FastReport.Web; using System.Web.UI.WebControls;
對于Index方法,編寫下面的代碼:
public ActionResult Index() { string report_path = "C:\\Program Files (x86)\\FastReports\\FastReport.Net\\Demos\\Reports\\"; //Report path System.Data.DataSet dataSet = new System.Data.DataSet(); //Create DataSet instance dataSet.ReadXml(report_path + "nwind.xml"); //Read XML databse WebReport webReport = new WebReport(); //Create webReport instance webReport.Width = Unit.Percentage(100); //Set the webReport object width 100% webReport.Height = Unit.Percentage(100); //Set the webReport object heigh 100% webReport.SinglePage = true; //Enable SinglePage mode webReport.Report.RegisterData(dataSet, "NorthWind"); //Register data source in the webReport object webReport.Report.Load(report_path + "Simple List.frx"); //Load a report into the webReport object webReport.CurrentTab.Name = "Simple List"; //Set the current tab name Report report2 = new Report(); //Create a Report instance which will be displayed in the second tab report2.RegisterData(dataSet, "NorthWind"); //Register data source in the report object report2.Load(report_path + "Labels.frx"); //Load a report into the report object webReport.AddTab(report2, "Labels").Properties.SinglePage=true; //Add web tab in the webReport object. Pass as parameters report object and tab name. Enable SinglePage mode for the tab. Report report3 = new Report(); //Create a Report instance which will be displayed in the third tab report3.RegisterData(dataSet, "NorthWind");//Register data source in the report object report3.Load(report_path + "Master-Detail.frx");//Load a report into the report object webReport.AddTab(report3, "Master-Detail");//Add web tab in the webReport object. Pass as parameters report object and tab name. webReport.TabPosition = TabPosition.InsideToolbar;//Set the property TabPosition ViewBag.WebReport = webReport; //Set the ViewBag as webReport return View(); }
還有一個(gè)有意思的屬性:
webReport.ShowTabClos??eButton
如果將其設(shè)置為true,則標(biāo)簽上將會(huì)顯示一個(gè)“X”,可以用來刪除標(biāo)簽。
這個(gè)標(biāo)簽在交互式報(bào)表中非常有用,標(biāo)簽將被動(dòng)態(tài)創(chuàng)建并包含詳細(xì)的報(bào)表。如果不需要某個(gè)報(bào)表,你就可以關(guān)閉它的標(biāo)簽。然后,如有必要,你可以再次生成標(biāo)簽。
上面我們講解了如何創(chuàng)建標(biāo)簽,向他們發(fā)送報(bào)表。我們使用的方法是:
public ReportTab AddTab(Report report, string name);
我們將報(bào)表對象和標(biāo)簽的名稱作為多個(gè)參數(shù)傳遞。然而,你也可以使用一個(gè)參數(shù)搞定:
public ReportTab AddTab(Report report);
我們只傳遞報(bào)表對象。標(biāo)簽名稱將自動(dòng)生成。這將會(huì)作為標(biāo)簽編號。
你還可以將已建好的報(bào)表發(fā)送到web報(bào)表的標(biāo)簽中:
public ReportTab AddTab(Report report, string name, bool reportDone);
在這里,我們提交一個(gè)報(bào)表、一個(gè)標(biāo)簽名稱和一個(gè)屬性,指出報(bào)表是否應(yīng)該預(yù)先建立。你可以將已經(jīng)構(gòu)建好的報(bào)表文件上傳到報(bào)表對象中,并將最后一個(gè)參數(shù)設(shè)置為true。然后報(bào)表將從指定的fpx文件中加載。
看起來差不多會(huì)是這個(gè)樣子:
Report report2 = new Report(); //Create a Report instance which will be displayed in the second tab report2.RegisterData(dataSet, "NorthWind"); //Register data source in the report object report2.Load(report_path + "Labels.frx"); //Load a report into the report object report2.Prepare();//Prepare the report string s = this.Server.MapPath("~/App_Data/Prepared.fpx");//Set the location to save prepared report report2.SavePrepared(s);//Save prepared report Report firstReport = new Report();//Create instance of Report object firstReport.LoadPrepared(s);//Upload prepared report to the Report object webReport.AddTab(firstReport, "First tab", true);//Add the tab to the WebReport toolbar
我展示了如何將準(zhǔn)備好的報(bào)表保存到文件中,然后加載它并在“Web報(bào)表”標(biāo)簽中使用它。
我們切換到視圖。在Views-> Home文件夾中,打開Index.cshtml文件。
所有的頁面代碼由以下四行組成:
@{ ViewBag.Title = "Home Page"; } @ViewBag.WebReport.GetHtml()
最后一行是報(bào)表輸出。主控制器會(huì)向頁面發(fā)送一個(gè)報(bào)表。
在視圖_Layout.cshtml(在Views - >Shared文件夾中)的初始化中為Web報(bào)表添加腳本:
<head> … @WebReportGlobals.Scripts() @WebReportGlobals.Styles() … </head>
編輯位于Views文件夾中的Web.config,添加命名空間:
<namespaces> … <add namespace="FastReport" /> <add namespace="FastReport.Web" /> </namespaces>
編輯位于項(xiàng)目根目錄中的Web.config,添加處理程序:
<handlers> … <add name="FastReportHandler" path="FastReport.Export.axd" verb="*" type="FastReport.Web.Handlers.WebExport"/> </handlers>
毫無疑問,在Web報(bào)表中添加標(biāo)簽的新功能是非常實(shí)用的,并且是符合用戶需求的。Web報(bào)表的功能正在逐漸增加。在不久的將來,Web報(bào)表將變得絲毫不遜色于桌面(desktop)報(bào)表。
產(chǎn)品介紹 | 下載試用 | 優(yōu)惠活動(dòng) | 在線客服 | 聯(lián)系Elyn
推薦閱讀
- FastReport VCL報(bào)表控件開發(fā)者手冊
- FastReport Online Designer中文手冊
- Fastreport.Net教程2016
- Fastreport.Net用戶手冊
- FastReport.Net教程2017(持續(xù)更新中···)
- FastReport Online Designer教程2017(持續(xù)更新中···)
- 報(bào)表教程2017(持續(xù)更新中···)