2011-03-28 76 views
15

我使用的是與Visual Studio 2010捆綁在一起的客戶端報告功能。我已經定義了一個RDLC文件,目前在品牌頂部使用嵌入圖像報告。該圖像是用戶公司的標誌。它與報告數據沒有任何關係......它只是一個標題。動態地在RDLC報告中設置圖像源

我希望能夠打破對嵌入圖像的依賴,因爲我開始不得不縮放應用程序。相反,我希望能夠動態設置圖像。不幸的是,沒有參數類型似乎支持這一點。

我已經研究過將源代碼從嵌入式切換到外部,並且可能在程序啓動時發佈徽標的圖像文件(徽標作爲資源嵌入到單獨的程序集中),然後將其作爲一個通用代碼,指定源文件。我不知道我有多喜歡這個選項,因爲它似乎是一個黑客。在測試明確設置路徑圖像時,我也遇到錯誤,有效地說該對象沒有設置爲實例。例如,我甚至試圖將它設置爲D:\ test.jpg,並在設計時得到這個錯誤...所以我更不情願嘗試這個選項。

我也看過從RDLC文件中調用引用程序集中的類,但似乎無法使其工作。它看起來像我可以引用一個程序集,然後通過一個名爲Code的特殊對象進行調用。因爲我的類是靜態的,它應該是Code.className.method,但這似乎不起作用。

我也考慮過把標題打破爲一個子報表,但我仍然不認爲我解決了我的依賴問題。它仍然需要相同的維護量。

我應該提到我正在使用對象作爲我的數據源。我應該選擇什麼樣的選項?我錯過了明顯的東西嗎?

回答

19

由於沒有關於此事的備選(或任何!)意見,我已經走得更遠,並提出了一個工作解決方案。

我正在選擇創建標誌的按需文件,並將其存儲在臨時位置。如果該文件不存在,我正在創建它。如果它確實存在,我只是引用存在的圖像。

在RDLC報告中,我創建了一個名爲Path type of Text的參數。接下來,在圖像的屬性中,我已將徽標圖像從嵌入式更改爲外部,並將「使用此圖像」設置爲參數:[@Path]。

然後,在代碼中,我傳入文件路徑作爲Path參數。但是我以前出錯的地方在於路徑必須是URL,而且我一直在嘗試將位置傳遞給磁盤。所以,這部分應該是這樣的:

我會說,MSDN文檔可能是一個更好一點。值得讚揚的是,有很多關於如何在更高層次上完成某些工作的詳細文件。這article幫助。它清楚地表明我需要一個路徑的URL,但直接在庫中檢查該屬性會更容易。但是,找到較低級別的文檔卻更困難,收效甚微。這是報告圖像對象的article。沒有太多機會設置感興趣的屬性。

+1

+1謝謝你清楚全面地回答你自己的問題,我用你的方法,它的作用就像魅力。這是一個很難獲得良好信息的領域。 – Carl 2013-02-13 12:38:07

+1

不適合我。使用report.Render直接打印不會顯示圖像。 – dave 2014-02-18 12:28:23

+2

我使用圖像原點「數據庫」和MIME類型圖像/ png進行了工作。然後,我在其中一個數據源字段中將該圖像作爲byte []傳遞。 – dave 2014-02-18 14:11:57

8

我有同樣的問題,但接受的解決方案並不適合我。事實證明,除了以URI格式提供路徑並將Image.Value設置爲=Parameters!ReportLogo.Value之外,我還需要將EnableExternalImages設置爲true。

report.EnableExternalImages = true; 
ReportParameter[] parameters = new ReportParameter[3]; 
... 
Uri pathAsUri = new Uri(_info.LogoPath); 
parameters[2] = new ReportParameter("ReportLogo", pathAsUri.AbsoluteUri); 
report.SetParameters(parameters);