Share via


我應該使用內嵌或非內嵌的報表?

在計劃搭配 Crystal Reports SDK 來建置應用程式時,其中一個最重要的考量就是您要使用內嵌還是非內嵌的報表。瞭解報表內嵌的 SDK 基礎觀念和影響因素,可以幫助您為 Crystal Reports for Visual Studio 專案選擇最合適的結構。

內嵌和非內嵌報表之間的差異為何?

內嵌報表是已匯入至 Visual Studio 專案或已在專案中建立的報表。當報表內嵌於專案內時,會自動產生報表的包裝函式類別。

非內嵌報表是位於 Visual Studio 專案外的報表。您可運用許多方式存取報表、將報表載入至物件模型 (以便透過程式設計方式與報表互動),但報表始終存留在專案外部。

內嵌的報表如何運作?

當報表匯入至或建立在專案內時,便會建立包裝函式類別 (與報表的名稱相同)。這個包裝函式類別會在專案中包裝 (代表) 報表。這個情形一旦發生,專案中的所有程式碼便會與建立用以代表報表的報表類別互動,而不與原始報表檔案本身互動。

當您編譯專案時,報表及其包裝函式類別都會嵌入組件,如同任何其他專案資源一般。

報表包裝函式類別是從通用基底類別 ReportDocument 延伸出來的。它繼承了 ReportDocument 的所有屬性及方法。

Note附註

本文件先前的版本說到「強型別」時,就是指內嵌報表而言。現在改用「內嵌」來指稱加入或匯入至 Visual Studio 專案內的報表。

ReportDocument 是 ReportDocument 物件模型的根類別。

非內嵌的報表如何運作?

非內嵌的報表都必須在外部進行存取,並且可以用下列方式讓 SDK 存取:

非內嵌的報表決不會匯入至專案內,因此永遠不會建立報表包裝函式類別 (不同於內嵌的報表)。相反的,非內嵌的報表會在執行階段以各自的方式載入至一個物件模型:

  • ReportDocument 物件模型會使用 ReportDocument.Load() 方法,將報表載入至 ReportDocument 物件模型。
    Note附註

    這只對位於檔案目錄路徑上的報表有作用。

  • CrystalReportViewer 物件模型使用 CrystalReportViewer.ReportSource 屬性,將報表直接繫結至控制項。
    Note附註

    建議您使用 ReportDocument 物件模型。如需詳細資訊,請參閱「我應該使用哪一個物件模型?」

選擇內嵌或非內嵌報表的時機

如果想要簡化專案的部署,請使用內嵌報表。您所使用的檔案會比較少,並且無需顧慮報表會誤置於不正確的檔案目錄路徑中。這個解決方案也提供更好的安全性,因為不會將報表公開任人修改。

再者,當您初次學習使用 Visual Studio 開發與部署 Crystal Reports 時,從內嵌報表著手也會比較容易。一旦將報表內嵌,就會一直當成類別存在於專案中,不僅可以從 IntelliSense 中取得,也可以在物件瀏覽器中看得到。您不必擔心檔案目錄中的報表被移動或刪除,或是必須正確拼寫路徑。

內嵌報表雖提供簡便性和安全性,但很費事。若不重新編譯整個專案,就無法加以修改。如果必須經常修改報表,那麼將報表保持為非內嵌時,存取及修改起來會比較容易,而不需顧慮每次都必須重新編譯組件。此外,內嵌報表的大小也有限制;否則要將超大型的報表編譯成內嵌資源會很費事。

再者,非內嵌的報表也提供延展性方面的優勢。

Crystal Reports for Visual Studio 2005 和 Crystal Reports Basic for Visual Studio 2008 中的網站只適用非內嵌報表。

報表繫結的案例將會展示許多用來繫結內嵌及非內嵌報表的方法 (請參閱「我應該使用哪一個報表繫結案例?」)。您也將學會如何使用 ReportDocument 做為任一報表類型的泛用類別。一旦您決定變換處理方式時,如此可以讓程式碼的變更維持在最小程度。