我想在标题中使用子报告,因为它被用于许多报告。但是,子报告不会进入标题,字段值也不会。虽然,参数会很好。
有关如何绕过此问题的任何建议或参考?
我想在标题中使用子报告,因为它被用于许多报告。但是,子报告不会进入标题,字段值也不会。虽然,参数会很好。
有关如何绕过此问题的任何建议或参考?
我用另一种方式解决了这个问题。
创建了一个只包含页眉和页脚的报告。
然后对于我们需要的每个报告,我们只需创建一个子报告。
我知道它远非完美。但它适用于我们的报告。
另一种选择是创建一个程序集,将数据泵入标题中的字段。如果标题中没有太图形化的内容,则可以正常工作...
我遇到了完全相同的问题。几个小时后,我找到了解决方案(没有子报告)。
在 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>
我PageName
在子报表中的代码视图中,在该部分正下方的 tablix 定义中设置了值:
<DataSetName>YourDataSetName</DataSetName>
有关您可以使用的全局变量的更多详细信息,请查看:
https ://msdn.microsoft.com/en-us/library/dd255216.aspx
一个建议可能有助于有限的情况子集:您可以使用数据集中的默认值填充参数,并在标题中使用该参数。当然,这一次只能为您获取一个字段/值,但是如果您只需要将数据库中的一两个项目放入您的标题中,这可能是一个不错的解决方法。
从这个答案中得到了想法: https ://stackoverflow.com/a/57991114/11829240
不能真正把它贴在那里,因为主题是关于 rdlc 的,它只是客户端。但我会说它适合这里。
创建一个图像,将其大小设置为按比例匹配,使用以下 url:
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。
编辑2:
[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 Type to 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
SSRS 将不允许子报表进入标题。我遇到过这个问题,我想我有一个解决方案。将子报表添加为附加数据集,并将响应放入文本框中。这个对我有用...?