RDLC 在指定的位置 \***.rdlc 找不到子报表"SubReport1" 请验证该子报表是否已发布,其名称是否正确 您所在的位置:网站首页 该位置找不到任何文字 RDLC 在指定的位置 \***.rdlc 找不到子报表"SubReport1" 请验证该子报表是否已发布,其名称是否正确

RDLC 在指定的位置 \***.rdlc 找不到子报表"SubReport1" 请验证该子报表是否已发布,其名称是否正确

2024-06-29 16:12| 来源: 网络整理| 查看: 265

引发这个错误的可能有几个原因.

其中一个是确实找不到rdlc文件, 路径确实没写对. 这里写图片描述

第二个,子报表有问题,无法正常显示, 也会报同样的错误. 建议先实现子报表的显示,然后再签入主报表, 会比较容易找问题. 子报表如果有问题, 主报表上只会显示这么个内容.不方便查找问题的原因.

第三个, 数据源名称不对.我们知道子报表的数据源需要在代码中单独配置加载的. 代码如下

ReportDataModel reportModel; public void Dispose() { reportModel = null; } public virtual byte[] MakePdf(ReportDataModel reportModel, WTemplateConfig tpl) { this.reportModel = reportModel; int i = 1; reportModel.WSWDrugTests.ForEach(a => a.SortCode = i++); //这个地方用在微生物分组分列上 var ReportTemplateFileDirectory = CenterConfig.GetConfig("ReportTemplateFileDirectory") as string; LocalReport report = new LocalReport(); //设置需要打印的报表的文件名称。 report.EnableExternalImages = true; report.ShowDetailedSubreportMessages = true; report.ReportPath = ReportTemplateFileDirectory + tpl.MasterTplFileName; //动态修改列宽 end //创建要打印的数据源 ReportDataSource master = new ReportDataSource("Master", new List() { reportModel }); report.DataSources.Add(master); //if (reportModel.Details != null) //{ // ReportDataSource details = new ReportDataSource("Details", reportModel.Details); // report.DataSources.Add(details); //} if (reportModel.WSWDetails != null) { ReportDataSource wswdetails = new ReportDataSource("WSWDetails", reportModel.WSWDetails); report.DataSources.Add(wswdetails); } report.SubreportProcessing += Report_SubreportProcessing; //刷新报表中的需要呈现的数据 report.Refresh(); Warning[] warnings; string[] streamids; string mimeType; string encoding="UTF-8"; string extension; string outType = "PDF";//PDF,Word,Excel 都可以 //string deviceInfo = "" + // " " + outType + "" + // " 21cm" + // " 29.7cm" + // " 0.5in" + // " 1in" + // " 1in" + // " 0.5in" + // ""; byte[] bytes = report.Render(outType, null, out mimeType, out encoding, out extension, out streamids, out warnings); report.Dispose(); report = null; return bytes; // 参考http://blog.csdn.net/Ealing/article/details/15814647 // 将报表的内容输出为指定格式的数据流。 //string deviceInfo = // "" + // " EMF" + // " 8.5in" + // " 11in" + // " 0.25in" + // " 0.25in" + // " 0.25in" + // " 0.25in" + // ""; // Warning[] warnings; // //将报表的内容按照deviceInfo指定的格式输出到CreateStream函数提供的Stream中。 // report.Render("Image", deviceInfo, CreateStream, out warnings); //下面是直接输出的代码 //Response.Clear(); //Response.Buffer = true; //Response.ContentType = mimeType; //Response.AddHeader("content-disposition", "attachment;filename=" + fileName + "." + extension); //Response.BinaryWrite(bytes); //Response.Flush(); //ReportViewer1.Dispose(); //ReportViewer1 = null; } private void Report_SubreportProcessing(object sender, SubreportProcessingEventArgs e) { string ReportDetailId = e.Parameters["ReportDetailId"].Values[0]; List data = reportModel.WSWDrugTests.Where(a => a.ReportDetailId == ReportDetailId).ToList(); if (data==null) { data = new List(); } //注意这里的 数据源名称是 ThreeDetails 这个数据源的名称是设计报表模板的时候的子报表中数据源名称, 要一字不差. ReportDataSource threeDetails = new ReportDataSource("ThreeDetails", data.ToArray() ); e.DataSources.Add(threeDetails); }

这里写图片描述

第三点, 子报表中的某些表达式,可能使用了错误的数据源名称, 一般发生在修改数据源名称的时候… 建议用文本文件编辑器打开rdlc 搜索 老的数据源名称,然后替换.可避免此类问题.



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有