Не удается найти событие ReportViewer для завершения рендеринга - PullRequest
10 голосов
/ 25 августа 2011

Я пытаюсь вызвать событие (чтобы удалить пользовательский индикатор прогресса / состояния), когда элемент управления ReportViewer завершает рендеринг.Я исследовал события для элемента управления ReportViewer и, похоже, не могу найти то, которое действительно срабатывает при завершении отчета.

Я использую Visual Studio 2010 и ASP.NET 4.

Спасибо за вашу помощь.

Ответы [ 4 ]

13 голосов
/ 06 августа 2013

Я знаю, что это старо, но я не был удовлетворен подходом опроса. Вместо этого вы можете зарегистрировать прослушиватель изменения свойств для изменений в isLoading (как описано здесь ).

В итоге добавьте немного 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
        }
    }
};
5 голосов
/ 07 сентября 2011

Одним из вариантов будет непрерывный опрос свойства isLoading клиентской части ReportViewer api .Если свойство isLoading возвращает значение true, продолжайте показывать индикатор прогресса, если оно возвращает значение false, скрыть его и прекратить опрос.

Я сам не пробовал, но, согласно документации, похоже, что он должен работать.

0 голосов
/ 22 сентября 2016

Попробуйте приведенный ниже фрагмент кода:

<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 будет запущена после завершения рендеринга отчета.

0 голосов
/ 02 апреля 2012

Я достигаю этого, используя JQuery так:

$(document).ready(function () {

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