我正在尝试在ReportViewer控件完成渲染时触发事件(删除自定义进度/状态指示器)。我已经探索了ReportViewer控件的事件,而且我似乎无法找到报告完成时实际触发的事件。
我正在使用Visual Studio 2010和ASP.NET 4。
感谢您的帮助。
答案 0 :(得分:13)
我知道这已经过时了,但我对投票方法并不满意。您可以注册属性更改侦听器以更改isLoading(如所述here)。
总之,向脚本管理器添加一些javascript,例如在您的表单元素中:
<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
}
}
};
答案 1 :(得分:5)
一种选择是连续轮询isLoading的client side ReportViewer api属性。如果isLoading属性返回true,则继续显示进度指示器,如果返回false则隐藏它并停止轮询。
我自己没有尝试过,但根据文档看起来它应该可行。
答案 2 :(得分:0)
我使用JQuery实现这一点:
$(document).ready(function () {
document.getElementById('ctl00_ctl00_DefaultContent_AdminContent_reportViewer').ClientController.CustomOnReportLoaded = function () {
alert('You see this after Report is Generated');
}
});
答案 3 :(得分:-1)
尝试以下代码段:
<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函数。