Asp.net Can';找不到用于渲染完成的ReportViewer事件

Asp.net Can';找不到用于渲染完成的ReportViewer事件,asp.net,events,reportviewer,Asp.net,Events,Reportviewer,我试图在ReportViewer控件完成渲染时触发事件(以删除自定义进度/状态指示器)。我已经研究了ReportViewer控件的事件,但似乎找不到在报告完成时实际触发的事件 我正在使用VisualStudio2010和ASP.NET4 感谢您的帮助。一个选项是持续轮询的属性。如果isLoading属性返回true,则继续显示进度指示器;如果返回false,则隐藏并停止轮询 我自己还没有尝试过,但根据文档,它看起来应该可以工作。我使用JQuery实现了这一点,如下所示: $(document).

我试图在ReportViewer控件完成渲染时触发事件(以删除自定义进度/状态指示器)。我已经研究了ReportViewer控件的事件,但似乎找不到在报告完成时实际触发的事件

我正在使用VisualStudio2010和ASP.NET4


感谢您的帮助。

一个选项是持续轮询的属性。如果isLoading属性返回true,则继续显示进度指示器;如果返回false,则隐藏并停止轮询


我自己还没有尝试过,但根据文档,它看起来应该可以工作。

我使用JQuery实现了这一点,如下所示:

$(document).ready(function () {

document.getElementById('ctl00_ctl00_DefaultContent_AdminContent_reportViewer').ClientController.CustomOnReportLoaded = function () { 
alert('You see this after Report is Generated');
}
});

我知道这是老生常谈,但我对投票方式不满意。您可以注册一个属性更改侦听器来更改isLoading(如上所述)

总之,在脚本管理器中添加一点javascript,例如在表单元素中:

<asp:ScriptManager ID="scriptManager" runat="server">
    <Scripts>
        <asp:ScriptReference Path="~/Reports/ReportViewer.js" />
    </Scripts>
</asp:ScriptManager>
<rsweb:ReportViewer ID="reportViewer" runat="server"/>

请尝试以下代码段:

<script type="text/javascript">
    var app = Sys.Application;
    app.add_init(ApplicationInit);

    function ApplicationInit(sender) {
        var prm = Sys.WebForms.PageRequestManager.getInstance();
        $('#ReportViewer1_ctl05').css('width', '1047px');
        if (!prm.get_isInAsyncPostBack()) {
            prm.add_endRequest(EndRequest)
        }
    }

    function EndRequest(sender, args) {
        var reportViewerControlId = "ReportViewer1";
        if (sender._postBackControlClientIDs[0].indexOf(reportViewerControlId) >= 0) {
            // do your stuff
        }
    }
</script>  

var-app=Sys.Application;
app.add_init(ApplicationInit);
函数应用单元(发送方){
var prm=Sys.WebForms.PageRequestManager.getInstance();
$('#ReportViewer1_ctl05').css('width','1047px');
如果(!prm.get_isInAsyncPostBack()){
prm.add_endRequest(endRequest)
}
}
函数EndRequest(发送方,参数){
var reportViewerControlId=“ReportViewer1”;
if(发件人.\u PostbackControlClientId[0].indexOf(ReportViewerControl)>=0){
//做你的事
}
}

完成报告渲染后,将触发EndRequest函数。

Josh,你的目标是正确的。我一定是在什么地方忽略了客户端ReportViewer API。下面是我用来告诉我的Silverlight应用程序在报告加载完成时执行某些操作的代码:`var rptViewer=$find(“”);var statusHider=setInterval(函数(){if(!rptViewer.get_isload()){slCtl.Content.SilverlightApp.HideStatus();clearInterval(statusHider);}},500)`可能应该使用该代码更新答案,而不是将其混合到注释中。这看起来确实是一个更优雅的解决方案,但我不再准备对其进行测试。@ahm126:很公平,希望其他人会发现它有用。根据我的经验,这在IE8中不起作用。其他浏览器是ok@Johann,这很有趣,因为我们的目标浏览器是IE8,而上面的方法对我们有效。。。。我可以很容易地相信,非直观的IE设置或类似设置可能会阻碍我的工作。@Matt有没有机会看到示例代码的运行[github/其他一些方法..],因为我无法找到/定义js文件ReportViewer.js来尝试此解决方案
<script type="text/javascript">
    var app = Sys.Application;
    app.add_init(ApplicationInit);

    function ApplicationInit(sender) {
        var prm = Sys.WebForms.PageRequestManager.getInstance();
        $('#ReportViewer1_ctl05').css('width', '1047px');
        if (!prm.get_isInAsyncPostBack()) {
            prm.add_endRequest(EndRequest)
        }
    }

    function EndRequest(sender, args) {
        var reportViewerControlId = "ReportViewer1";
        if (sender._postBackControlClientIDs[0].indexOf(reportViewerControlId) >= 0) {
            // do your stuff
        }
    }
</script>