【发布时间】:2021-08-04 23:50:17
【问题描述】:
我想在标题中使用子报告,因为它被用于许多报告。但是,子报告不会进入标题,字段值也不会。虽然,参数会很好。
关于如何绕过这个的任何建议或参考?
【问题讨论】:
标签: reporting-services subreport
我想在标题中使用子报告,因为它被用于许多报告。但是,子报告不会进入标题,字段值也不会。虽然,参数会很好。
关于如何绕过这个的任何建议或参考?
【问题讨论】:
标签: reporting-services subreport
我用另一种方式解决了这个问题。
创建了一个只是包含页眉和页脚的报告。
然后,对于我们需要的每个报告,我们只需创建一个子报告。
我知道它远非完美。但它适用于我们的报告。
另一种选择是创建一个程序集,将数据泵入标题中的字段。如果标题中没有太图形化的内容,则可以正常工作...
【讨论】:
我遇到了完全相同的问题。几个小时后,我找到了解决方案(没有子报告)。
在 SSRS 2012 中存在“矩形”。我从未真正研究过它,因为我认为它只是用于图形用途。事实上,您可以在其中对多个元素进行分组。您可以将整个矩形发布为 Reportpart。您可以在其他报告中使用此报告部分,甚至在页眉或页脚中。
【讨论】:
在页眉或页脚的母版页级别使用 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
【讨论】:
在有限的情况下可能会有所帮助的一个建议是:您可以使用数据集中的默认值填充参数,并在标题中使用该参数。当然,这一次只能为您获取 一个 字段/值,但如果您只需要将数据库中的一两个项目放入您的标题中,这可能是一个不错的解决方法。
【讨论】:
SSRS 不允许子报表进入标题。我有这个问题,我想我有一个解决方案。将子报表添加为附加数据集,并将响应放入文本框中。它对我有用...?
【讨论】:
从这个答案中得到了想法: 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
&rs:Format=IMAGE 给我一张图片。
&rc:OutputFormat=BMP 作为 BMP,因为报告无法处理 TIFF。
&rc:dpix=1000&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
【讨论】: