0

我用Visual Studio 2013創建了一個.rdlc報告,我們稱之爲Main.rdlc,並且它有子報告控制。SSRS「LoadSubreportDefinition」獲取錯誤「沒有指定運行報告所需的一個或多個參數」

在另一方面,我創建了一個Sub.rdlc作爲子報表與Main.rdlc

鏈接我用這個代碼中設置報表路徑上後面的代碼:

ReportViewer viewer = new ReportViewer(); 

// load report definition 
string reportTemplate = Server.MapPath("~/Main.rdlc"); 
viewer.LocalReport.LoadReportDefinition(ReportLocalizator.Localize(reportTemplate, culture)); 
viewer.LocalReport.EnableHyperlinks = true; 
viewer.LocalReport.SetParameters(new ReportParameter("Culture", culture)); 

// load subreport definition 
viewer.LocalReport.SubreportProcessing += LocalReport_SubreportProcessing; 
string subReportTemplate = Server.MapPath("~/Sub.rdlc"); 
viewer.LocalReport.LoadSubreportDefinition("SubReport", ReportLocalizator.Localize(subReportTemplate, culture)); 

viewer.LocalReport.DataSources.Clear(); 
viewer.LocalReport.DataSources.Add(new ReportDataSource("MyDataSet", myDataSet.Data.DefaultView)); 
viewer.LocalReport.EnableHyperlinks = true; 
viewer.LocalReport.Refresh(); 

Warning[] warnings; 
string[] streamIds; 
string mimeType = string.Empty; 
string encoding = string.Empty; 
string extension = string.Empty; 

byte[] bytes = viewer.LocalReport.Render("PDF", null, out mimeType, out encoding, out extension, out streamIds, out warnings); 
Response.ClearHeaders(); 
Response.BufferOutput = true; 
Response.Buffer = true; 
Response.HeaderEncoding = System.Text.Encoding.UTF8; 
Response.Clear(); 
Response.ContentType = mimeType; 
Response.AddHeader("content-length", bytes.Length.ToString()); 
Response.AddHeader("content-disposition", "attachment; filename=PrintedForm" + "." + extension); 
Response.OutputStream.Write(bytes, 0, bytes.Length); // create the file 
Response.Flush(); // send it to the client to download 
Response.End(); 

不過,我總是得到錯誤「運行報告所需的一個或多個參數尚未指定。」,儘管子報表中沒有參數。

的代碼運行良好時,我刪除了這部分

// load subreport definition 
viewer.LocalReport.SubreportProcessing += LocalReport_SubreportProcessing; 
string subReportTemplate = Server.MapPath("~/Sub.rdlc"); 
viewer.LocalReport.LoadSubreportDefinition("SubReport", ReportLocalizator.Localize(subReportTemplate, culture)); 

是它的代碼是導致錯誤或RDLC本身?有沒有人有關於這個錯誤的經驗?任何形式的幫助,將不勝感激。由於

+0

後移動電話SetParameters我假設你正在選擇一些參數,然後運行報告,然後通過點擊您的子報告之前。上述代碼正在運行主報告,然後在子報告從主報告中獲取參數之前運行子報告。 – Snowlockk

+0

嗨@Slocklockk,謝謝你的回覆。在運行報告之前,我沒有選擇任何參數。在後面的代碼中設置的唯一參數是'文化' - 並且子報表中沒有參數字段。你是否從該代碼中找到任何線索? –

+0

你看過這個答案嗎? https://stackoverflow.com/questions/15140176/getting-a-one-or-more-parameters-required-to-run-the-report-have-not-been-speci – Raphael

回答

0

的問題是在代碼中。該錯誤告訴主要報告中缺少參數。

這是因爲我的LoadSubReportDefinition調用之前調用SetParameters

我不知道爲什麼,但調用LoadSubReportDefinition似乎清除你之前已經設置任何參數。

因此,解決辦法是LoadSubReportDefinition

ReportViewer viewer = new ReportViewer(); 

// load report definition 
string reportTemplate = Server.MapPath("~/Main.rdlc"); 
viewer.LocalReport.LoadReportDefinition(ReportLocalizator.Localize(reportTemplate, culture)); 
viewer.LocalReport.EnableHyperlinks = true; 

// The problem is here! Move it after LoadSubreportDefinition 
// viewer.LocalReport.SetParameters(new ReportParameter("Culture", culture)); 

// load subreport definition 
viewer.LocalReport.SubreportProcessing += LocalReport_SubreportProcessing; 
string subReportTemplate = Server.MapPath("~/Sub.rdlc"); 
viewer.LocalReport.LoadSubreportDefinition("SubReport", ReportLocalizator.Localize(subReportTemplate, culture)); 

// Move it here! 
viewer.LocalReport.SetParameters(new ReportParameter("Culture", culture)); 

viewer.LocalReport.DataSources.Clear(); 
viewer.LocalReport.DataSources.Add(new ReportDataSource("MyDataSet", myDataSet.Data.DefaultView)); 
viewer.LocalReport.EnableHyperlinks = true; 
viewer.LocalReport.Refresh(); 
+0

你在ReportLocalizator中放了什麼? – forX

相關問題