我想在ReportViewer控件完成渲染后触发一个事件(以移除自定义进度/状态指示器)。我已经探索了ReportViewer控件的事件,但似乎找不到在报表完成时触发的事件。
我正在使用Visual Studio 2010和ASP.NET 4。
感谢您的帮助。
我想在ReportViewer控件完成渲染后触发一个事件(以移除自定义进度/状态指示器)。我已经探索了ReportViewer控件的事件,但似乎找不到在报表完成时触发的事件。
我正在使用Visual Studio 2010和ASP.NET 4。
感谢您的帮助。
我知道这个问题已经很旧了,但我对投票方法并不满意。你可以注册一个属性更改监听器来监听isLoading是否有变化(正如这里所描述的那样)。
简而言之,只需在表单元素中加入一些JavaScript代码即可,例如在script manager中:
<asp:ScriptManager ID="scriptManager" runat="server">
<Scripts>
<asp:ScriptReference Path="~/Reports/ReportViewer.js" />
</Scripts>
</asp:ScriptManager>
<rsweb:ReportViewer ID="reportViewer" runat="server"/>
然后连接它并在ReportViewer.js中添加任何客户端逻辑:
Sys.Application.add_load(function () {
$find("reportViewer").add_propertyChanged(viewerPropertyChanged);
});
function viewerPropertyChanged(sender, e) {
if (e.get_propertyName() == "isLoading") {
if ($find("reportViewer").get_isLoading()) {
// Do something when loading starts
}
else {
// Do something when loading stops
}
}
};
var rptViewer = $find("<%= ReportViewer1.ClientID %>"); var statusHider = setInterval(function () { if (!rptViewer.get_isLoading()) { slCtl.Content.SilverlightApp.HideStatus(); clearInterval(statusHider); } }, 500);
- Andrew$(document).ready(function () {
document.getElementById('ctl00_ctl00_DefaultContent_AdminContent_reportViewer').ClientController.CustomOnReportLoaded = function () {
alert('You see this after Report is Generated');
}
});
尝试以下代码片段:
<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>
当报表渲染完成后,EndRequest函数将被触发。