2012-09-12 85 views
0

我寫幾年前的Windows應用程序最近需要一些變化(最初編寫VS2005,使用VS2008修改,現在更新/修改爲VS2012項目)。微軟VS2012報告與子報告工作在開發但沒有生活

該應用程序包含一個包含兩個子報告的Microsoft報告。子報告數據是一個數據集,在ReportViewer1.LocalReport.SubreportProcessing事件期間填充。

一個新的字段被添加到主報告中,但子報告沒有被修改。該報告會開發PC上如預期,但對客戶端的筆記本電腦安裝的時候,子報告失敗,並顯示消息: - Data retrieval failed for the sub-report, <report name>, located at <report...rdlc>. Please check the log files for more information

沒有日誌文件都在客戶端筆記本電腦

我試圖生產手動安裝CTP 2012 Microsoft Report查看器,但安裝失敗,報告已經存在更新的版本(可能來自SQL Server Express 2012,也是同時安裝的)。

用於測試的數據庫從實時備份恢復,因此數據是相同的。子報告中添加ReportDataSource的子報告事件包含一個try-catch塊,它不會引發任何異常

在開發過程中,當我在VS2012中打開報告時,打開一個對話框詢問他們是否應該將其更新爲我允許的2012格式,但這可能與故障無關。

有沒有人碰到這個問題?有沒有辦法強制客戶端筆記本電腦上的日誌文件的物理輸出?

UPDATE

把一些MessagesBoxes在代碼中我發現,子報告沒有處理的原因,但我現在需要找出原因。

'LocalReport_SubreportProcessing'事件爲我的報告觸發兩次 - 每次子報告一次。

爲了確定哪個子報表需要額外的數據源,我檢查'SubreportProcessingEventArgs.ReportPath'的值。在我的開發系統中,它具有報告的名稱(減去.rdlc擴展名),但在客戶端筆記本電腦上,該值爲空。

我看不到如何將報告內置到輸出中。主報告在筆記本電腦上顯示OK(只是缺少子報告),但從目前的位置來看,我不知道 - 需要更多調查!

回答

2

我剛剛偶然發現了同樣的問題。你有沒有因爲對我們這樣做而討厭微軟?

無論如何,我認爲最好的解決辦法是檢查SubreportProcessingEventArgs.DataSourceNames[0]而不是檢查SubreportProcessingEventArgs.ReportPath。這將(我選中)具有子報表數據源的名稱。

如果您唯一命名數據源,您可以確定哪個子報表正在調用事件並正確設置數據源。我通常將我的數據源命名爲{SubreportName}DataSet,因此我所有的數據源名稱都包含子報表名稱。祝你好運。