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