• <menu id="w2i4a"></menu>
  • logo FastReport-web報表開發(fā)系列教程(持續(xù)更新中)
    文檔首頁>>FastReport-web報表開發(fā)系列教程(持續(xù)更新中)>>FastReport教程:如何在單頁應(yīng)用程序Angular 7中使用Web報表

    FastReport教程:如何在單頁應(yīng)用程序Angular 7中使用Web報表


    下載FastReport.Net最新版本

    如果您在ASP.Net Core應(yīng)用程序中使用FastReport.Net并希望切換到單頁應(yīng)用程序(SPA),那么本文適合您。 由于Angular和ASP.Net Core的共生,您可以使用您熟悉的MVC應(yīng)用程序架構(gòu)。

    我們來看看創(chuàng)建SPA應(yīng)用程序的方法。這對那些剛剛學(xué)習(xí)Angular的人很有用。要使用Angular,您需要安裝Node.js,這是一個在服務(wù)器端執(zhí)行JavaScript代碼的平臺。 最簡單的方法是從開發(fā)人員的網(wǎng)站https://nodejs.org/en/下載安裝程序。 它還需要.Net Core SDK 2.0或更新版本。 如果安裝了Microsoft Visual Studio 2017,則已安裝SDK。

    現(xiàn)在我們在所需的位置為我們未來的應(yīng)用程序創(chuàng)建一個文件夾。運行命令提示符。使用cd命令轉(zhuǎn)到創(chuàng)建的目錄。我們執(zhí)行命令:

    dotnet new angular -o SPAWebReport

    此命令將創(chuàng)建一個三頁的演示應(yīng)用程序。

    打開創(chuàng)建的項目。首先,我們需要在NuGet管理器中安裝其他軟件包:

    FastReport

    FastReport.Core和FastReport.Web包可以在FastReport.Net安裝目錄的NuGet文件夾中找到。要安裝這些軟件包,您需要設(shè)置本地軟件包存儲庫。在包管理器的右上角有一個下拉列表,用于選擇包的來源和齒輪圖標。 通過單擊此圖標,您將看到設(shè)置窗口,在本地源中,您將指定NuGet文件夾的路徑。

    我們需要一份報表和一個數(shù)據(jù)庫。 將App_Data文件夾添加到項目根目錄,并將Master-Detail.frx和nwind.xml文件拖入其中。 這些文件可以在Demos - > Reports文件夾中的FastReport.Net安裝目錄中找到。

    項目的根目錄是Controllers目錄,該目錄已包含一個控制器。我們使用它。 只添加一個方法:

    using FastReport.Web;
    …
    [HttpGet("[action]")]
            public IActionResult ShowReport()
            {
                WebReport WebReport = new WebReport();
                WebReport.Width = "1000";
                WebReport.Height = "1000";
                WebReport.Report.Load("App_Data/Master-Detail.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 xml database            WebReport.Report.RegisterData(dataSet, "NorthWind"); // Registering the data source in the report
                ViewBag.WebReport = WebReport; // pass the report to View
                return View();
            }

    現(xiàn)在您需要為它創(chuàng)建一個視圖。 將Views文件夾添加到項目根目錄。 還有一個SampleData。 現(xiàn)在,在此文件夾中,我們將使用以下代碼創(chuàng)建ShowReport.cshtml視圖:

    @await ViewBag.WebReport.Render()

    在我們的演示SPA中,有三個不必要的網(wǎng)頁。 您可以安全地刪除這些頁面; 我們只對app.component.htm感興趣 - 這是頁面模板。 對于此模板,有一個相應(yīng)的腳本app.component.ts。

    您可以在app.component.htm文件中設(shè)置頁面模板,也可以直接在腳本中的組件模板參數(shù)中進行設(shè)置。

    我們的任務(wù)是“cross”角度和ASP .Net Core。 這意味著我們將使用控制器和視圖進行操作。 相當標準的ASP .Net Core MVC應(yīng)用程序。 最簡單的解決方案是在iframe中傳遞視圖:

    App.component.ts:

    import { Component } from '@angular/core';
    
    @Component({
        selector: 'app-root',
        template: `   `
    })
    export class AppComponent {
    }

    這樣一個簡單的代碼允許您在加載SPA應(yīng)用程序時立即顯示報表。 如果您為報表選擇了單獨的頁面,但是如果需要更多交互性,這是合適的嗎? 例如,單擊時加載報表的按鈕。 讓我們?yōu)轫撁婺0逄砑右粋€按鈕,以及一個按鈕單擊事件及其處理程序:

    @Component({
        selector: 'app-root',
        template: ``
    })
    export class AppComponent {
        show: boolean = false;
    
        Clicked() {
            this.show = true;
        }
    }

    我們在其屬性中添加了一個按鈕和一個單擊的事件。 但是如何在按下按鈕之前隱藏框架? 為此,我們將框架包裝在具有條件的div中 - 檢查'show'變量是否為'true'。 默認情況下,此變量設(shè)置為false,因此在顯示頁面時不會顯示此div。 因此,Clicked函數(shù)只是將show變量的值設(shè)置為true。

    將幀的src值放入變量并將其設(shè)置在單擊的函數(shù)中會很好。 但是,如果你這樣做:

    ……
    url: string;
    
        Clicked() {
            this.show = true;
            this.url = "api/SampleData/ShowReport";
        }

    那樣不行。 事實是鏈接需要使用特殊的“cleaner”DOMSanitizer進行規(guī)范化。 它旨在使html代碼和URL免受惡意包含。

    讓我們在app文件夾中創(chuàng)建safeUrl.pipe.ts腳本:

    import { Pipe, PipeTransform } from '@angular/core';
    import { DomSanitizer } from '@angular/platform-browser';
    
    @Pipe({ name: 'safeUrl' })
    export class SafeUrlPipe implements PipeTransform {
        constructor(private sanitizer: DomSanitizer) { }
        transform(url) {
            return this.sanitizer.bypassSecurityTrustResourceUrl(url);
        }
    }

    該類將以正確的格式檢查url的安全性。 為了在app.component中使用此Pipe,我們需要將它添加到app.module.ts中的模塊:

    import { SafeUrlPipe } from "./safeUrl.pipe";
    
    @NgModule({
      declarations: [
        AppComponent,
          SafeUrlPipe
      ],
      imports: [
        BrowserModule.withServerTransition({ appId: 'ng-cli-universal' }),
          FormsModule
      ],
      providers: [],
      bootstrap: [AppComponent]
    })
    export class AppModule { }
    Let's go back to app.component.ts. Now we can use Pipe:
     import { Component } from '@angular/core';
    
    @Component({
        selector: 'app-root',
        template: ``
    })
    export class AppComponent {
        show: boolean = false;
        url: string;
    
        Clicked() {
            this.show = true;
            this.url = "api/SampleData/ShowReport";
        }
    }

    進一步開發(fā)該想法,您可以將報表的參數(shù)名稱添加到ShowReport方法,并在輸出中獲取所需的報表。

    在啟動應(yīng)用程序之前有最后的觸摸。 打開Startup.cs文件并在Configure()方法中添加一行:

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
            {
    …
                app.UseFastReport();
    …
            }

    因此,我們連接到應(yīng)用程序FastReportBuilderExtensions,它將允許渲染報表。

    現(xiàn)在讓我們運行我們的演示應(yīng)用程序:

    FastReport

    按下按鈕,我們得到了所需的報表。 正如您所看到的,使用帶有Angular SPA的FastReport并不困難。

    購買FastReport.Net正版授權(quá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); })();