使用 VS 2008。
我有两个存储过程,一个用于获取主报告的数据,另一个用于获取子报告的数据,并且两个 SP 使用相同的参数 QuoteID。
我已使用 ReportDocument 将参数发送到主报告。但我不知道如何向SubReport发送参数。
我使用报表文档的 setparameter 方法尝试了很多差异方法,该方法也将子报表名称作为参数。但它没有。
以下是我使用过的代码
string Type = gvQuotationDetails.Rows[QuoteIndex].Cells["Type"].EditedFormattedValue.ToString();
FilePath = ConfigurationManager.AppSettings["EMP_IMG_PATH"].ToString() + "\\" + ValQuoteID.ToString() + ".pdf";
DeleteExistingFile(FilePath);
try
{
AccountsPayableMaster objAPM = new AccountsPayableMaster();
QuotationReport obj = new QuotationReport();
objReportDocument.Load(Application.StartupPath + @"\rptQuotationReport.rpt");
obj.crysQuotationReport.LogOnInfo = objAPM.ConnectionDetails("SD_SalesOrderReport;1");
obj.crysQuotationReport.LogOnInfo = objAPM.ConnectionDetails("SD_GetBatchReportDetails;1");
obj.crysQuotationReport.ReportSource = objReportDocument;
objReportDocument.SetParameterValue("@QuoteID", ValQuoteID);
objReportDocument.SetParameterValue("Type", Type);
//objReportDocument.Subreports[Application.StartupPath + @"\BatchSubReport.rpt"].SetParameterValue("@QuoteID", ValQuoteID);
//objReportDocument.Subreports["BatchReport.rpt"].SetParameterValue("@QuoteID", ValQuoteID);
string[] Print = objAPM.GetPrintDetails();
SetPrintParameters(objReportDocument, Print);
obj.Show();
objReportDocument.ExportToDisk(ExportFormatType.PortableDocFormat, FilePath);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
发送参数到子报表
//objReportDocument.Subreports[Application.StartupPath + @"\BatchSubReport.rpt"].SetParameterValue("@QuoteID", ValQuoteID);
//objReportDocument.Subreports["BatchReport.rpt"].SetParameterValue("@QuoteID", ValQuoteID);
////objReportDocument.SetParameterValue("@QuoteID", ValQuoteID,"BatchReport.rpt);
没有任何效果。我已经在这上面浪费了两天了。
[SD_SalesOrderReport;1]
主 SP 和 [SD_GetBatchReportDetails;1]
子报告 SP。
如果有人可以为此提供解决方案,那就太好了。如果设计需要进行一些更改,请分享图片。谢谢。
经过多次尝试,我终于解决了这个问题。也许这对其他人有帮助。我为主报表和子报表使用了相同的参数名称,使用下面的代码来设置其参数
objReportDocument.SetParameterValue("@QuoteID", ValQuoteID,objReportDocument.Subreports[0].Name.ToString());
嗯,这对我来说真的很有帮助,因为我的问题已通过以下代码解决了。
rd.SetParameterValue("TotalVisits", totalVisits, rd.Subreports[0].Name.ToString());
rd.SetParameterValue("GrandTotal", grandTotalPaymentType, rd.Subreports[1].Name.ToString());
objReportDocument.SetParameterValue("@QuoteID", ValQuoteID,objReportDocument.Subreports[0].Name.ToString());
是的,上面的语句解决了问题,但是我们可以给出子报表名称而不是子报表索引吗?如果一个报表中有多个子报表,我们如何知道子报表索引号?