Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Can't find ReportViewer event for rendering complete

I'm trying to fire an event (to remove a custom progress/status indicator) when the ReportViewer control is finished rendering. I've explored the events for the ReportViewer control and I can't seem to find one that actually fires when the report is complete.

I'm using Visual Studio 2010 and ASP.NET 4.

Thanks for your help.

like image 479
Andrew Avatar asked Aug 25 '11 17:08

Andrew


2 Answers

I know this is old, but I wasn't satisfied with the polling approach. You can register a property change listener for changes to isLoading instead (as described here).

In summary, add a bit of javascript to the script manager e.g. in your form element:

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

Then hook it up and add any client-side logic you need in 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
        }
    }
};
like image 148
Matt Avatar answered Oct 27 '22 00:10

Matt


One option would be to continuously poll the isLoading property of the client side ReportViewer api. If the isLoading property returns true continue showing the progress indicator, if it returns false hide it and stop polling.

I haven't tried it myself but according to the documentation is look like it should work.

like image 34
joshb Avatar answered Oct 27 '22 00:10

joshb