我在月末流程中自动从我们的一些报告创建 PDF。我遇到了ReportViewer.LocalReport
找不到报告的问题。在项目中,报告文件位于“(项目根文件夹)/Reports/report.rdlc”中。
如何设置ReportViewer.LocalReport.ReportPath
以便可以参考我的报告文件?我宁愿不设置完整路径,因为我不知道它安装在客户端机器上时会安装在哪里。
我在月末流程中自动从我们的一些报告创建 PDF。我遇到了ReportViewer.LocalReport
找不到报告的问题。在项目中,报告文件位于“(项目根文件夹)/Reports/report.rdlc”中。
如何设置ReportViewer.LocalReport.ReportPath
以便可以参考我的报告文件?我宁愿不设置完整路径,因为我不知道它安装在客户端机器上时会安装在哪里。
使用 Application.StartupPath 属性,它始终指向您的 EXE 所在的目录:
using System.IO;
...
string exeFolder = Application.StartupPath;
string reportPath = Path.Combine(exeFolder, @"Reports\report.rdlc");
您需要确保报告也被复制到您的 bin\Debug\Reports 文件夹中,以便它可以在 IDE 中工作。在构建后事件中使用 xcopy /s /d 来复制文件。
该路径始终相对于您的“当前目录”,在大多数情况下是 exe 文件 - 更改 rdlc 文件,以便将它们复制到目标文件夹而不是嵌入资源中(通常是这样做的)。项目中的路径无关紧要。
您可以将报告存储在“资源”文件中,并通过使用嵌入“资源”文件的给定 .dll / .exe 的程序集阅读器,可以将其作为流式引用读取。然后将您的报告设置为嵌入流以获取报告定义。
特别说明。如果您的报表具有嵌套的子报表,则报表将失败,除非您还在 LocalReport 子报表定义中设置另一个对子报表 .rdlc 文件的此类引用。
据我所知,Windows XP 存在一个错误。该问题不会在 Windows 7 上出现。
以上所有答案都成立,但我有一个更正。
SaveFileDialog
一旦您使用看起来像更改当前应用程序路径的a ,此问题就会出现。当您使用当前路径时会发生这种情况,相对于当前 wokring 目录,这是加载 RDLC 的默认值,即reportpath = "nameOfReport.rldc"
. 如果您想在使用 SaveFileDialog 后刷新报告,reportviewer 找不到报告文件的路径。
解决方案来自上面帖子中的 Hans Passant,但我会改变
string exeFolder = Path.GetDirectoryName(Application.StartupPath);
对此
string exeFolder = Path.GetDirectoryName(Application.ExecutablePath);
谢谢汉斯
简单的解决方案是..
项目的默认路径是 projectname/bin/debug
在报告查看器代码中
Reportpath = "../../folder1/report1.rdlc"
默认路径是projectname/bin/debug,但是如果您在根路径创建 rdlc,则必须在根路径下但 .net 不提供此类功能,因此只需添加../即可将当前目录更改为相应目录。
我将../../两次 bcz 我的 rdlc 放在根路径,所以我必须更改 debug 然后 bin ,最后我到达根路径。如果您有单独的 rdlc 文件夹,请确保您写下文件夹名称并放置/我们的。
希望你喜欢..