Ani*_*a C 84 reportviewer reporting-services ssrs-2008 reporting-services-2012 ssrs-2012
我将报告服务从2008版迁移到另一个服务器版本2008 R2.在2008版本中,报告在Safari上运行良好.报告的新版本2008 R2根本没有出现.我看到的只是参数部分,然后报告是空白的.与Chrome相同.根据Microsoft Safari IS,如果以有限的方式支持.报告并不复杂.事实上,我创建了一个报告,其上只有一行,以查看它是否会显示在Safari中但不是,该报告也完全空白.有没有人在Safari上查看SSRS报告?我是否需要处理某种配置设置?
Ema*_*eco 108
将以下脚本附加到以下文件(在SSRS服务器上)
C:\Program Files\Microsoft SQL Server\MSRS10_50.MSSQLSERVER\Reporting Services\ReportManager\js\ReportingServices.js
function pageLoad() {
var element = document.getElementById("ctl31_ctl10");
if (element)
{
element.style.overflow = "visible";
}
}
Run Code Online (Sandbox Code Playgroud)
注意:正如azzlak所说,div的名字并不总是如此ctl31_ctl10.对于SQL 2012尝试ctl32_ctl09和2008 R2尝试ctl31_ctl09.如果此解决方案不起作用,请从浏览器中查看HTML以查看脚本是否已正常更改overflow:auto属性overflow:visible.
插入.aspx页面(或链接.css文件,如果可用)此样式行
#reportViewer_ctl09 {
overflow:visible !important;
}
Run Code Online (Sandbox Code Playgroud)
Chrome和Safari overflow:auto以与IE相同的方式呈现.
SSRS HTML是QuirksMode HTML并依赖于IE 5.5的错误.非IE浏览器没有IE quirksmode,因此正确呈现HTML
SSRS 2008 R2报告生成的HTML页面包含一个div具有overflow:auto样式的HTML页面,它将报告转换为不可见的报告.
<div id="ctl31_ctl10" style="height:100%;width:100%;overflow:auto;position:relative;">
Run Code Online (Sandbox Code Playgroud)
我可以通过使用Chrome的开发工具()手动切换overflow:auto到overflow:visible生成的网页来查看有关Chrome的报告F12.
我喜欢Tim的解决方案,它很容易且有效.
但是仍然存在一个问题:用户每次更改参数时(我的报告使用参数!)AJAX刷新div,溢出:自动标记被重写,没有脚本更改它.
此技术说明详细说明了问题所在:
发生这种情况是因为在使用AJAX面板构建的页面中,只有AJAX面板才会更改其状态,而无需刷新整个页面.因此,
OnLoad您在<body>标记上应用的事件只会被触发一次:第一次加载页面.之后,更改任何AJAX面板将不再触发这些事件.
用户einarq建议使用此解决方案:
另一个选项是将您的函数重命名为pageLoad.具有此名称的任何函数将由asp.net ajax自动调用(如果它存在于页面上,也在每次部分更新后).如果这样做,您还可以从body标签中删除onload属性
所以编写了解决方案中显示的改进脚本.
小智 27
只需包括SizeToReportContent="true"如下所示
<rsweb:ReportViewer ID="ReportViewer1" runat="server" SizeToReportContent="True"...
Run Code Online (Sandbox Code Playgroud)
Mic*_*own 23
我正在使用Chrome版本21和SQL 2008 R2 SP1,并且上述修复程序都不适用于我.下面是有效的代码,与其他答案一样,我添加了这段代码以附加到"C:\ Program Files\Microsoft SQL Server\MSRS10_50.MSSQLSERVER\Reporting Services\ReportManager\js\ReportingServices.js"(在SSRS服务器):
//Fix to allow Chrome to display SSRS Reports
function pageLoad() {
var element = document.getElementById("ctl31_ctl09");
if (element)
{
element.style.overflow = "visible";
}
}
Run Code Online (Sandbox Code Playgroud)
Tim*_*dge 14
这是一个已知问题.问题是div标签的样式为"overflow:auto",这显然不适用于Safari和Chrome使用的WebKit(参见Emanuele Greco的回答).我不知道如何利用Emanuele的建议来使用RS:ReportViewerHost元素,但我使用JavaScript解决了它.
问题

解
由于在div元素的style属性中指定了"overflow:auto",其id为"ctl31_ctl10",因此我们无法在样式表文件中覆盖它,因此我使用了JavaScript.我将以下代码添加到"C:\ Program Files\Microsoft SQL Server\MSRS10_50.MSSQLSERVER\Reporting Services\ReportManager\js\ReportingServices.js"
function FixSafari()
{
var element = document.getElementById("ctl31_ctl10");
if (element)
{
element.style.overflow = "visible"; //default overflow value
}
}
// Code from http://stackoverflow.com/questions/9434/how-do-i-add-an-additional-window-onload-event-in-javascript
if (window.addEventListener) // W3C standard
{
window.addEventListener('load', FixSafari, false); // NB **not** 'onload'
}
else if (window.attachEvent) // Microsoft
{
window.attachEvent('onload', FixSafari);
}
Run Code Online (Sandbox Code Playgroud)
注意
似乎有一个SSRS 2005的解决方案,我没有尝试,但我不认为它适用于SSRS 2008,因为我找不到"DocMapAndReportFrame"类.
小智 12
我的解决方案基于上述想法.
function pageLoad() {
var element = document.querySelector('table[id*=_fixedTable] > tbody > tr:last-child > td:last-child > div');
if (element) {
element.style.overflow = "visible";
}
}
Run Code Online (Sandbox Code Playgroud)
它不仅限于某个id,而且您不需要包含任何其他库,例如jQuery.
Eri*_*iss 11
这是我用于Report Server 2008 R2的解决方案
无论报表服务器将在表的"id"属性中输出什么内容,它都应该有效.我不认为你总能认为它会是"ctl31_fixedTable"
我使用了上面的建议和一些方法的混合动态加载jquery库到这里找到的javascript文件的页面
在服务器上转到以下目录:C:\ Program Files\Microsoft SQL Server\MSRS10_50.MSSQLSERVER\Reporting Services\ReportManager\js
将jquery库jquery-1.6.2.min.js复制到该目录中
创建文件的备份副本ReportingServices.js编辑文件.并将其附加到底部:
var jQueryScriptOutputted = false;
function initJQuery() {
//if the jQuery object isn't available
if (typeof(jQuery) == 'undefined') {
if (! jQueryScriptOutputted) {
//only output the script once..
jQueryScriptOutputted = true;
//output the script
document.write("<scr" + "ipt type=\"text/javascript\" src=\"../js/jquery-1.6.2.min.js\"></scr" + "ipt>");
}
setTimeout("initJQuery()", 50);
} else {
$(function() {
// Bug-fix on Chrome and Safari etc (webkit)
if ($.browser.webkit) {
// Start timer to make sure overflow is set to visible
setInterval(function () {
var div = $('table[id*=_fixedTable] > tbody > tr:last > td:last > div')
div.css('overflow', 'visible');
}, 1000);
}
});
}
}
initJQuery();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
109369 次 |
| 最近记录: |