Окончательное решение (работает и в 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";
}
}
Примечание : как заметил аззлак, имя 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 визуализируют overflow:auto
иначе, чем IE.
SSRS HTML - это HTML QuirksMode, который зависит от ошибок IE 5.5. Браузеры, отличные от IE, не имеют quirksmode IE и, следовательно, правильно отображают HTML.
HTML-страница, созданная отчетами SSRS 2008 R2, содержит объект div
со overflow:auto
стилем, который превращает отчет в невидимый отчет.
<div id="ctl31_ctl10" style="height:100%;width:100%;overflow:auto;position:relative;">
Я могу видеть отчеты о Chrome вручную изменить , overflow:auto
чтобы overflow:visible
в полученном веб - страницы с помощью Chrome в Dev Tools ( F12).
Мне нравится решение Тима , оно простое и работает.
Но по-прежнему существует проблема: каждый раз, когда пользователь меняет параметры (в моих отчетах используются параметры!), AJAX обновляет div, тег overflow: auto перезаписывается, и ни один сценарий не меняет его.
В этом техническом примечании объясняется, в чем проблема:
Это происходит потому, что на странице, созданной с использованием панелей AJAX, только панели AJAX изменяют свое состояние, не обновляя всю страницу. Следовательно, OnLoad
события, которые вы применили к <body>
тегу, запускаются только один раз: при первой загрузке вашей страницы. После этого изменение любой из панелей AJAX больше не будет вызывать эти события.
Пользователь einarq предложил такое решение :
Другой вариант - переименовать вашу функцию в pageLoad. Любые функции с таким именем будут автоматически вызываться asp.net ajax, если он существует на странице, также после каждого частичного обновления. Если вы сделаете это, вы также можете удалить атрибут onload из тега body
Итак, написал улучшенный сценарий, который показан в решении.