代码之家  ›  专栏  ›  技术社区  ›  Mike Wills

在我的winform应用程序中获取rdlc报告的相对路径

  •  8
  • Mike Wills  · 技术社区  · 14 年前

    我正在自动创建一个PDF从我们的一些报告在一个月末的过程。我遇到了一个问题 ReportViewer.LocalReport 找不到我的报告。在项目中,报表文件位于“(project root folder)/reports/report.rdlc”。

    如何设置 ReportViewer.LocalReport.ReportPath 所以我可以参考我的报告文件? 我不想设置完整路径,因为我不知道在客户端计算机上安装时它将安装在哪里。

    4 回复  |  直到 8 年前
        1
  •  16
  •   Hans Passant    8 年前

    使用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来复制文件。

        2
  •  0
  •   kubal5003    14 年前

    路径总是相对于您的“当前目录”,在大多数情况下,该目录是EXE文件-更改RDLC文件,以便将它们复制到目标文件夹,而不是嵌入到资源中(通常就是这样做的)。项目中的路径无关紧要。

        3
  •  0
  •   DRapp    14 年前

    您可以将报告存储在“资源”文件中,并且通过使用嵌入“资源”文件的给定.dll/.exe的程序集读取器,可以读取为流引用。然后将报表设置为嵌入流以获取报表定义。

    特别注意。如果报表具有嵌套的子报表,则除非在LocalReport子报表定义中设置对subReport.rdlc文件的另一个此类引用,否则报表将失败。

        4
  •  0
  •   Christian Specht    13 年前

    据我所知,有一个来自windows xp的bug。这个问题在windows 7上没有体现出来。

    以上所有的答案都成立,但我有一个修正。

    一旦您使用 SaveFileDialog 这看起来会更改当前应用程序的路径。当使用当前路径(相对于加载rdlc的默认目录current wokring directory),即 reportpath = "nameOfReport.rldc" . 如果要在使用“保存文件”对话框后刷新报表,报表查看器找不到报表文件的路径。

    解决办法来自汉斯·帕桑特在上面的帖子,但我会改变

    string exeFolder = Path.GetDirectoryName(Application.StartupPath);
    

    对此

    string exeFolder = Path.GetDirectoryName(Application.ExecutablePath);
    

    谢谢汉斯