2011-12-27 26 views
1

由於當前報表產品的侷限性(SSRS,Crystal Reports)以及我的用戶主要是熟悉Excel的財務/業務人員,我正在考慮使用Excel編寫我自己的報表引擎組件如SpreadsheetGear或Aspose.Cells,並將其集成到我們的WinForms應用程序中。需要指針來編寫一個可擴展的報表引擎

這兩個庫都提供一個電子表格查看器WinForms組件,因此生成的電子表格報告將在保存其參數後以表單的形式顯示給用戶,然後他可以保存它。

我已經在一個單獨的winforms項目上完成了它,它顯然很容易。只需將參數控件放在表單中,連接到數據庫,生成電子表格並完成。

但是,爲每個報告執行此操作顯然需要重複「樣板」代碼和表單設計,並降低應用程序的可維護性和可升級性。因此,我正在考慮將報告編寫爲插件(DLL),它只提供生成報告的代碼/邏輯,並將最終工作表對象返回給調用者(「Report Preview」窗體) 。

一番考慮之後,我認爲主叫和外接之間的職責是如下共享:

報告DLL /插件將提供主叫方(主UI)的列表用戶需要爲此報告傳遞的參數,以及其名稱,可能的值(例如,組合框的列表)。

然後它將由主UI在表單上創建它們。控件類型將根據參數的數據類型推斷出來(一個字符串將是一個TextBox等)。

主UI會將填充參數傳遞給報告生成方法,以及一些應用程序特定設置(連接字符串,應用程序的用戶名)。

報表DLL將生成報表並返回到主UI生成的工作表/報表對象並將其顯示在預覽控件上。

要做到這一點從技術上來說,我認爲我需要創建一個接口,用於我的報告的DLL,並實現像

List<ReportParameter> GetReportsParameters() 
Report GenerateReport() 

從主UI方法,我將訪問他們,叫他們通過反思。

這聽起來像一個很好的策略,它是否爲未來的可擴展性留下了適當的空間? 我希望在模塊化之間取得良好平衡,同時不會因爲我的插件體系結構對未來過於靜態而受到靈活性的限制。

如果您在過去取得類似的成績,您是否可以提供一些有用的提示以確保這一點並共享?

謝謝。我正在用C#,.Net 4.0和WinForms開發數據庫後端是SQL Server 2005)。

+0

此外,像MEF(微軟可擴展性框架)或MAF(微軟插件Framerwork)等MS技術可以提供幫助嗎?或者他們似乎對此有點矯枉過正? – 2011-12-27 17:46:29

回答

0

看看Templater。它可能已經做了你想要的大部分東西。

Github上有真實示例。

Disclamer:我是圖書館的作者。

+0

當我在尋找一個功能強大的圖書館時,我已經訪問過您的網站,我的感覺是無法應對大型數據集(即將行從DataTable或其他類型的集合插入目標範圍),而是「郵件合併」通過搜索/用標籤替換值。它看起來很強大,但恐怕它不是我想要的。如果我忽略了某些內容,請隨時告訴我錯誤。 Aspose.Cells做了一些名爲「智能標記」的簡單順序。 – 2011-12-27 17:43:24

+0

你覺得它無法處理大型數據集意味着什麼?模板支持DataTable/IEnumerable/IDataReader/DataSet。它可以根據這些集合中的項目擴展表格/段落/範圍。你看過Github的例子嗎? – 2011-12-27 17:52:08

相關問題