【问题标题】:Is there a way to put subreports in headers in SSRS?有没有办法将子报表放在 SSRS 的标题中?
【发布时间】:2021-08-04 23:50:17
【问题描述】:

我想在标题中使用子报告,因为它被用于许多报告。但是,子报告不会进入标题,字段值也不会。虽然,参数会很好。

关于如何绕过这个的任何建议或参考?

【问题讨论】:

    标签: reporting-services subreport


    【解决方案1】:

    我用另一种方式解决了这个问题。

    创建了一个只是包含页眉和页脚的报告。

    然后,对于我们需要的每个报告,我们只需创建一个子报告。

    我知道它远非完美。但它适用于我们的报告。

    另一种选择是创建一个程序集,将数据泵入标题中的字段。如果标题中没有太图形化的内容,则可以正常工作...

    【讨论】:

    • 我害怕我会听到这样的回应。每个报告的标题略有不同。除了我想要子报告的那篇文章。谢谢!
    【解决方案2】:

    我遇到了完全相同的问题。几个小时后,我找到了解决方案(没有子报告)。

    在 SSRS 2012 中存在“矩形”。我从未真正研究过它,因为我认为它只是用于图形用途。事实上,您可以在其中对多个元素进行分组。您可以将整个矩形发布为 Reportpart。您可以在其他报告中使用此报告部分,甚至在页眉或页脚中。

    【讨论】:

      【解决方案3】:

      在页眉或页脚的母版页级别使用 Globals!PageName 内置字段,然后在每个子报表中定义 PageName 值。这将允许页眉或页脚随PageName 变量中定义的字符串值而改变。

      例如:将页脚文本框设置为:[&PageName]=Globals!PageName

      在母版页调用的每个子报表中,将PageName 值定义为:

      <PageName>This is the Dynamic Page Footer String.  You can include subreport names, or any dynamic subreport text here </PageName>
      

      我在子报表中的代码视图中,在该部分正下方的 tablix 定义中设置了 PageName 值:

      <DataSetName>YourDataSetName</DataSetName> 
      

      有关您可以使用的全局变量的更多详细信息,请查看:
      https://msdn.microsoft.com/en-us/library/dd255216.aspx

      【讨论】:

        【解决方案4】:

        在有限的情况下可能会有所帮助的一个建议是:您可以使用数据集中的默认值填充参数,并在标题中使用该参数。当然,这一次只能为您获取 一个 字段/值,但如果您只需要将数据库中的一两个项目放入您的标题中,这可能是一个不错的解决方法。

        【讨论】:

          【解决方案5】:

          SSRS 不允许子报表进入标题。我有这个问题,我想我有一个解决方案。将子报表添加为附加数据集,并将响应放入文本框中。它对我有用...?

          【讨论】:

          • 虽然这不是一个直接的解决方案,而是一个解决方法的想法,所以真的不认为我们的答案应该被否决。所以投票赞成。
          【解决方案6】:

          从这个答案中得到了想法: https://stackoverflow.com/a/57991114/11829240

          无法真正将其发布在那里,因为该主题是关于 rdlc 的,它只是客户端。 但我会说它适合这里。

          创建一个图像,将其大小设置为适合比例,使用以下网址:

          http://*reportserverUser*:*reportserverPassword*@*ssrsHost*/ReportServer?%2f*reportName*&rs:Command=Render&rs:Format=IMAGE&rc:OutputFormat=BMP&rc:dpix=1000&rc:dpiy=1000
          

          &amp;rs:Format=IMAGE 给我一张图片。

          &amp;rc:OutputFormat=BMP 作为 BMP,因为报告无法处理 TIFF。

          &amp;rc:dpix=1000&amp;rc:dpiy=1000给我更高的分辨率,这样不会难看

          编辑:似乎可以在 VisualStudio 本地工作,但不能在 ReportServer 上工作。可能必须为身份验证创建自定义 DLL。

          EDIT2:

          [System.Security.SecuritySafeCritical]
          [WebPermission(System.Security.Permissions.SecurityAction.Assert, Unrestricted = true)]
          public static string GetReport(string reportname)
          {
          
              // request file permission for config-file
              FileIOPermission f = new FileIOPermission(FileIOPermissionAccess.Read, @"c:\ssrs\ssrsutils_auth.txt");
              f.Assert();
          
              // BASE-URL\tusername\tpassword
              var config = File.ReadAllText(@"c:\ssrs\ssrsutils_auth.txt");
          
              // Get BASE-URL and insert reportname into {0} placeholder
              var str = string.Format(config.Split('\t')[0], reportname);
              var requestUri = new Uri(str);
          
              // Set Credentials according to configuration
              NetworkCredential nc = new NetworkCredential(config.Split('\t')[1], config.Split('\t')[2]);
          
              HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(requestUri);
          
              request.Credentials = nc;
          
              // Give me an Image object
              var img = Image.FromStream(request.GetResponse().GetResponseStream());
          
              // and return as Base64
              return GetBase64(img);
          }
          
          private static string GetBase64(Image image)
          {
              using (MemoryStream m = new MemoryStream())
              {
                  image.Save(m, ImageFormat.Png);
                  byte[] imageBytes = m.ToArray();
                  return Convert.ToBase64String(imageBytes);
              }
          }
          

          然后将图像源设置为数据库,使用以下表达式:

          =*Project*.*Class*.GetReport("*ReportName*")
          

          Mime 输入image/bmp,你就可以开始了

          示例配置c:\ssrs\ssrsutils_auth.txt(将 [TAB] 替换为实际的 \t - ASCII 09):

          http://*ssrsHost*/ReportServer?%2f{0}&rs:Command=Render&rs:Format=IMAGE&rc:OutputFormat=BMP&rc:dpix=1000&rc:dpiy=1000[TAB]username[TAB]password
          

          顺便提一下,SSRS 处理 CAS 的方式。 https://stackoverflow.com/a/61816621/11829240

          【讨论】:

            猜你喜欢
            • 2010-09-24
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-12-12
            • 1970-01-01
            • 1970-01-01
            • 2012-07-13
            相关资源
            最近更新 更多