Solución definitiva (¡también funciona en SSRS 2012!)
Agregue la siguiente secuencia de comandos al siguiente archivo (en el servidor 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";
}
}
Nota : Como señaló azzlak, el nombre del div no siempre es ctl31_ctl10
. Para SQL 2012 intente ctl32_ctl09
y para 2008 R2 intente ctl31_ctl09
. Si esta solución no funciona, mire el HTML de su navegador para ver si el script ha funcionado correctamente cambiando la overflow:auto
propiedad a overflow:visible
.
Solución para el control ReportViewer
Inserte en la .aspx
página (o en un .css
archivo vinculado , si está disponible) esta línea de estilo
#reportViewer_ctl09 {
overflow:visible !important;
}
Razón
Chrome y Safari se renderizan overflow:auto
de manera diferente con respecto a IE.
SSRS HTML es QuirksMode HTML y depende de los errores de IE 5.5. Los navegadores que no son de IE no tienen el modo peculiar de IE y, por lo tanto, procesan el HTML correctamente
La página HTML producida por los informes de SSRS 2008 R2 contiene un div
que tiene overflow:auto
estilo y convierte el informe en un informe invisible.
<div id="ctl31_ctl10" style="height:100%;width:100%;overflow:auto;position:relative;">
Puedo ver informes en Chrome cambiando manualmente overflow:auto
a overflow:visible
en la página web producida usando las herramientas de desarrollo de Chrome ( F12).
Me encanta la solución de Tim , es fácil y funciona.
Pero todavía hay un problema: cada vez que el usuario cambia los parámetros (¡mis informes usan parámetros!) AJAX actualiza el div, la etiqueta overflow: auto se reescribe y ningún script lo cambia.
Este detalle de la nota técnica explica cuál es el problema:
Esto sucede porque en una página construida con paneles AJAX, solo los paneles AJAX cambian su estado, sin actualizar toda la página. En consecuencia, los OnLoad
eventos que aplicó en la <body>
etiqueta solo se activan una vez: la primera vez que se carga su página. Después de eso, cambiar cualquiera de los paneles AJAX ya no activará estos eventos.
El usuario einarq sugirió esta solución :
Otra opción es cambiar el nombre de su función a pageLoad. Cualquier función con este nombre será llamada automáticamente por asp.net ajax si existe en la página, también después de cada actualización parcial. Si hace esto, también puede eliminar el atributo onload de la etiqueta del cuerpo
Entonces escribió el script mejorado que se muestra en la solución.