• <menu id="w2i4a"></menu>
  • logo FastReport.Net教程2019

    文檔首頁(yè)>>FastReport.Net教程2019>>如何使用具有FastReport.Core庫(kù)的Online Designer

    如何使用具有FastReport.Core庫(kù)的Online Designer


    下載FastReport.Net最新版本

    FastReport.Net在線訂購(gòu)火熱進(jìn)行中,立可享受特別優(yōu)惠!點(diǎn)此鏈接,速來(lái)?yè)屬?gòu)?。。?/span>

    許多FastReport.Core用戶都對(duì)報(bào)表生成器如何在使用React庫(kù)編寫的Web應(yīng)用程序中工作感興趣。在本文中,我們將介紹使用在線設(shè)計(jì)器的方法。盡管它與常規(guī)報(bào)表顯示在同一個(gè)Web對(duì)象中,但與React中顯示的差異很大。

    如果您從未在React上使用.Net Core上的后端創(chuàng)建應(yīng)用程序,那么您需要:

    1)安裝NodeJS。這是一個(gè)軟件包,允許您在服務(wù)器端執(zhí)行JavaScript代碼,以及安裝各種JavaScript庫(kù)。

    2)安裝Microsoft Visual Studio 2017或其他IDE + .Net Core SDK 2.0。

    要?jiǎng)?chuàng)建應(yīng)用程序,請(qǐng)?jiān)陧?xiàng)目所在的文件夾中打開Windows命令提示符,然后執(zhí)行以下命令:

    dotnet new react -o ReactFRCoreDesigner

    打開創(chuàng)建的項(xiàng)目。讓我們將FastReport庫(kù)添加到NuGet包管理器中。配置文件夾的本地包源:

    C:\ Program Files(x86)\ FastReports \ FastReport.Net \ Nugets

    安裝FastReport.Core包。

    在項(xiàng)目中找到Startup.cs文件,并在Configure()方法中添加一行代碼:

    app.UseFastReport();

    現(xiàn)在我們可以在項(xiàng)目中使用報(bào)表生成器。

    除了顯示在線設(shè)計(jì)器之外,我們還會(huì)查看傳輸所需報(bào)表名稱的方式,并將其上傳到在線設(shè)計(jì)器。因此,我們將App_Data文件夾添加到項(xiàng)目中。在其中,我們將從FR.Net安裝目錄中的Demos \ Reports文件夾添加報(bào)表模板。

    FastReport

    如您所見,我們還從同一文件夾中添加了一個(gè)xml文件。這是一個(gè)報(bào)告數(shù)據(jù)庫(kù)。

    找到Controllers文件夾。我們可以使用SampleDataController控制器。添加兩個(gè)方法:

    …
    using FastReport.Web;
    using System.IO;
    …
    [HttpGet("[action]")]
     public IActionResult Design(string name)
     {
     WebReport WebReport = new WebReport();
     WebReport.Width = "1000";
     WebReport.Height = "1000";
     if (name != "Blank")
     WebReport.Report.Load("App_Data/" + name + ".frx"); // Load the report into the WebReport object
     System.Data.DataSet dataSet = new System.Data.DataSet(); // Create a data source
     dataSet.ReadXml("App_Data/nwind.xml"); // Open the database xml
     WebReport.Report.RegisterData(dataSet, "NorthWind"); // Registering the data source in the report
     
     WebReport.Mode = WebReportMode.Designer; // Set the web report object mode - designer display
     WebReport.DesignerLocale = "en";
     WebReport.DesignerPath = @"WebReportDesigner/index.html"; // We set the URL of the online designer
     WebReport.DesignerSaveCallBack = @"api/SampleData/SaveDesignedReport"; // Set the view URL for the report save method
     WebReport.Debug = true;
     ViewBag.WebReport = WebReport; // pass the report to View
     return View();
     }
     
     [HttpPost("[action]")]
     // call-back for save the designed report
     public IActionResult SaveDesignedReport(string reportID, string reportUUID)
     {
     ViewBag.Message = String.Format("Confirmed {0} {1}", reportID, reportUUID); // Set the message for representation
     Stream reportForSave = Request.Body; // Write the result of the Post request to the stream.
     string pathToSave = @"App_Data/TestReport.frx"; // get the path to save the file
     using (FileStream file = new FileStream(pathToSave, FileMode.Create)) // Create a file stream
     {
     reportForSave.CopyTo(file); // Save query result to file
     }
     return View();
     }

    第一種方法創(chuàng)建Web報(bào)表對(duì)象,為其設(shè)置模板和數(shù)據(jù)源,還設(shè)置報(bào)表編輯模式,報(bào)表設(shè)計(jì)器設(shè)置。因此,該方法將返回將顯示W(wǎng)eb報(bào)表對(duì)象的視圖。該方法有一個(gè)參數(shù) - 報(bào)表的名稱,我們?cè)趯?bào)表模板加載到報(bào)表的Web對(duì)象時(shí)替換該參數(shù)。

    第二種方法是用于單擊報(bào)表保存按鈕的回調(diào)處理程序。它將編輯的報(bào)表保存在App_Data文件夾中。

    對(duì)于這兩種方法,您必須創(chuàng)建兩個(gè)視圖。在項(xiàng)目根目錄中創(chuàng)建一個(gè)Views文件夾。現(xiàn)在回到控制器。右鍵單擊設(shè)計(jì)方法簽名,然后從菜單中選擇“添加視圖”。設(shè)置視圖名稱 - 設(shè)計(jì)。用代碼替換創(chuàng)建的視圖的全部?jī)?nèi)容:

    @await ViewBag.WebReport.Render()

    對(duì)于SaveDesignedReport方法,我們還創(chuàng)建了一個(gè)具有相同名稱的視圖。 其內(nèi)容被替換為:

    @ViewBag.Message

    我們轉(zhuǎn)向前端。 React應(yīng)用程序位于ClientApp文件夾中。 在解決方案瀏覽器的樹中展開它。 進(jìn)一步我們打開src和components目錄。 將新組件添加到此文件夾。 創(chuàng)建一個(gè)名為Designer的javascript文件:

    import React, { PureComponent, Fragment } from 'react';
    import { WebReport } from './WebReport';
     
    export class Designer extends PureComponent {
     constructor(props) {
     super(props);
     this.state = {
     options: [
     {
     value: 'Select report name …',
     },
     {
     value: 'Matrix',
     },
     {
     value: 'Master-Detail',
     },
     {
     value: 'Text',
     },
     ]
     };
     } 
     
     handleChange = (event) => {
     this.setState({ name: event.target.value }); 
     };
     
     render() {
     const { options, value } = this.state;
     return ({options.map(item => ({item.value}))});
     }
     }

    注意WebReport組件的導(dǎo)入。

    首先,將狀態(tài)添加到類構(gòu)造函數(shù)中。 在我們的例子中,它是一個(gè)包含報(bào)表名稱的數(shù)組。 接下來(lái),立即考慮render() - 構(gòu)建網(wǎng)頁(yè)的方法。 每次狀態(tài)更改時(shí)都會(huì)執(zhí)行渲染。 例如,當(dāng)我們選擇列表項(xiàng)時(shí),將執(zhí)行onChanges事件處理程序。 此方法使用setState函數(shù)設(shè)置name變量的新狀態(tài)。 之后,將重建渲染的內(nèi)容。

    請(qǐng)注意

    這里調(diào)用另一個(gè)組件。 作為參數(shù),它接收選定的報(bào)表名稱。

    考慮WebReport組件,它也應(yīng)該像在components目錄中創(chuàng)建的Designer.js一樣:

    import React, { Component } from 'react';
     
    export class WebReport extends Component {
     constructor(props) {
     super(props);
     this.state = { designer: "" };
     }
     
     componentWillReceiveProps(nextProps) {
     fetch('api/SampleData/Design?name=' + nextProps.name + '').then(response => response.text()).then(text => {
     this.setState({ designer: text });
     });
     };
     
     render() {
     return ();
     }
    }

    這個(gè)組件的重點(diǎn)是對(duì)后端執(zhí)行'get'請(qǐng)求并返回生成的html代碼。

    每次props屬性更改時(shí),都會(huì)執(zhí)行內(nèi)置函數(shù)componentWillReceiveProps(nextProps)。 也就是說(shuō),當(dāng)此組件在調(diào)用時(shí)將收到新值。 我們從屬性中獲取報(bào)表名稱,并將其替換為請(qǐng)求的URL。 我們以文本格式得到答案。 它需要轉(zhuǎn)換為安全的html代碼才能插入到DOM中。 dangerouslySetInnerHTML屬性將幫助我們解決這個(gè)問(wèn)題。

    它仍然只是將Designer組件添加到菜單中。 添加到NavMenu文件:

    …Designer

    并在App.js文件中添加:

    …
    import { Designer } from './components/Designer';
    ………

    運(yùn)行該應(yīng)用程序,在Designer頁(yè)面上,我們將看到一個(gè)下拉列表:

    FastReport

    選擇Matrix報(bào)表的名稱:

    FastReport

    現(xiàn)在點(diǎn)擊Master-Detail:

    FastReport

    轉(zhuǎn)到“報(bào)表”選項(xiàng)卡,然后單擊“保存”按鈕:

    FastReport

    右側(cè)出現(xiàn)“已保存”消息,告訴我們?cè)诜?wù)器上成功保存報(bào)表。

    FastReport

    另一個(gè)文件出現(xiàn)在App_Data文件夾中 - TestReport.frx。

    這樣就完成了我們演示應(yīng)用程序的創(chuàng)建。我們成功顯示了報(bào)表設(shè)計(jì)器,將必要的報(bào)表加載到其中并保存。


    相關(guān)鏈接:

    關(guān)于產(chǎn)品的任何問(wèn)題,歡迎咨詢在線客服>>

    掃碼咨詢


    添加微信 立即咨詢

    電話咨詢

    客服熱線
    023-68661681

    TOP
    三级成人熟女影院,欧美午夜成人精品视频,亚洲国产成人乱色在线观看,色中色成人论坛 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();