我應該使用內嵌或非內嵌的報表?
在計劃搭配 Crystal Reports SDK 來建置應用程式時,其中一個最重要的考量就是您要使用內嵌還是非內嵌的報表。瞭解報表內嵌的 SDK 基礎觀念和影響因素,可以幫助您為 Crystal Reports for Visual Studio 專案選擇最合適的結構。
內嵌和非內嵌報表之間的差異為何?
內嵌報表是已匯入至 Visual Studio 專案或已在專案中建立的報表。當報表內嵌於專案內時,會自動產生報表的包裝函式類別。
非內嵌報表是位於 Visual Studio 專案外的報表。您可運用許多方式存取報表、將報表載入至物件模型 (以便透過程式設計方式與報表互動),但報表始終存留在專案外部。
內嵌的報表如何運作?
當報表匯入至或建立在專案內時,便會建立包裝函式類別 (與報表的名稱相同)。這個包裝函式類別會在專案中包裝 (代表) 報表。這個情形一旦發生,專案中的所有程式碼便會與建立用以代表報表的報表類別互動,而不與原始報表檔案本身互動。
當您編譯專案時,報表及其包裝函式類別都會嵌入組件,如同任何其他專案資源一般。
報表包裝函式類別是從通用基底類別 ReportDocument 延伸出來的。它繼承了 ReportDocument 的所有屬性及方法。
附註 |
---|
本文件先前的版本說到「強型別」時,就是指內嵌報表而言。現在改用「內嵌」來指稱加入或匯入至 Visual Studio 專案內的報表。 |
ReportDocument 是 ReportDocument 物件模型的根類別。
非內嵌的報表如何運作?
非內嵌的報表都必須在外部進行存取,並且可以用下列方式讓 SDK 存取:
- 循著檔案目錄路徑即可在硬碟上找到報表 (請參閱「繫結至程式碼中的檔案目錄路徑」)。
- 報表可以公開為報表 Web 服務 (請參閱「繫結至報表 Web 服務 URL」)。
- 報表可能是透過 Crystal Services 所公開的其中一組報表 (請參閱 「使用 Crystal 服務的 CrystalReportViewer 繫結案例」)。
非內嵌的報表決不會匯入至專案內,因此永遠不會建立報表包裝函式類別 (不同於內嵌的報表)。相反的,非內嵌的報表會在執行階段以各自的方式載入至一個物件模型:
- ReportDocument 物件模型會使用 ReportDocument.Load() 方法,將報表載入至 ReportDocument 物件模型。
附註 這只對位於檔案目錄路徑上的報表有作用。
- CrystalReportViewer 物件模型使用 CrystalReportViewer.ReportSource 屬性,將報表直接繫結至控制項。
附註 建議您使用 ReportDocument 物件模型。如需詳細資訊,請參閱「我應該使用哪一個物件模型?」。
選擇內嵌或非內嵌報表的時機
如果想要簡化專案的部署,請使用內嵌報表。您所使用的檔案會比較少,並且無需顧慮報表會誤置於不正確的檔案目錄路徑中。這個解決方案也提供更好的安全性,因為不會將報表公開任人修改。
再者,當您初次學習使用 Visual Studio 開發與部署 Crystal Reports 時,從內嵌報表著手也會比較容易。一旦將報表內嵌,就會一直當成類別存在於專案中,不僅可以從 IntelliSense 中取得,也可以在物件瀏覽器中看得到。您不必擔心檔案目錄中的報表被移動或刪除,或是必須正確拼寫路徑。
內嵌報表雖提供簡便性和安全性,但很費事。若不重新編譯整個專案,就無法加以修改。如果必須經常修改報表,那麼將報表保持為非內嵌時,存取及修改起來會比較容易,而不需顧慮每次都必須重新編譯組件。此外,內嵌報表的大小也有限制;否則要將超大型的報表編譯成內嵌資源會很費事。
再者,非內嵌的報表也提供延展性方面的優勢。
Crystal Reports for Visual Studio 2005 和 Crystal Reports Basic for Visual Studio 2008 中的網站只適用非內嵌報表。
報表繫結的案例將會展示許多用來繫結內嵌及非內嵌報表的方法 (請參閱「我應該使用哪一個報表繫結案例?」)。您也將學會如何使用 ReportDocument 做為任一報表類型的泛用類別。一旦您決定變換處理方式時,如此可以讓程式碼的變更維持在最小程度。