终极解决方案(也适用于 SSRS 2012!)
将以下脚本附加到以下文件(在 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";
}
}
注意:正如 azzlak 所说,div 的名称并不总是ctl31_ctl10。对于 SQL 2012,请尝试ctl32_ctl09,对于 2008 R2,请尝试 ctl31_ctl09。如果此解决方案不起作用,请在浏览器中查看 HTML 以查看脚本是否正常工作,将 overflow:auto 属性更改为 overflow:visible。
ReportViewer 控件的解决方案
将此样式行插入.aspx 页面(或链接的.css 文件,如果有)
#reportViewer_ctl09 {
overflow:visible !important;
}
原因
Chrome 和 Safari 以与 IE 不同的方式呈现 overflow:auto。
SSRS HTML 是 QuirksMode HTML 并且依赖于 IE 5.5 错误。非 IE 浏览器没有 IE quirksmode,因此可以正确呈现 HTML
SSRS 2008 R2 报表生成的 HTML 页面包含 div,其样式为 overflow:auto,它会将报表变成不可见的报表。
<div id="ctl31_ctl10" style="height:100%;width:100%;overflow:auto;position:relative;">
我可以通过使用 Chrome 的开发工具 (F12) 在生成的网页中手动将 overflow:auto 更改为 overflow:visible 来查看有关 Chrome 的报告。
我喜欢Tim's solution,它既简单又有效。
但是还有一个问题:任何时候用户更改参数(我的报表使用参数!)AJAX刷新div,overflow:auto标签被重写,没有脚本改变它。
This technote detail 说明问题所在:
这是因为在使用 AJAX 面板构建的页面中,只有 AJAX 面板会更改其状态,而不会刷新整个页面。因此,您在<body> 标记上应用的OnLoad 事件只会触发一次:第一次加载页面时。之后,更改任何 AJAX 面板将不再触发这些事件。
用户einarq建议this solution:
另一个选择是将您的函数重命名为 pageLoad。如果页面上存在具有此名称的任何函数,asp.net ajax 将自动调用它,每次部分更新后也是如此。如果这样做,您还可以从 body 标记中删除 onload 属性
因此编写了解决方案中显示的改进脚本。