【问题标题】:How to find when reportviewer is loaded using reportviewer api如何使用reportviewer api查找reportviewer何时加载
【发布时间】:2013-12-03 15:30:35
【问题描述】:

我已经为我的所有报告创建了一个页面,并且我正在使用我制作的工具栏加载这些报告的不同版本(折线、饼图、图表、图形等)。除了非表格类型的图表(折线、饼图、条形图等)外,一切都在那里运行良好。当这些被渲染时,我发现图例和系列中的文本变得模糊,并且通过这里和其他地方的一些研究发现它们被转换为图像,然后通过自动生成的 css 类在我身上调整大小。

首先,我想做的是: 我想从加载时生成的图像中删除此类。如果我在报告中关闭异步渲染

AsyncRendering="false"

连同这段 jquery(针对包含 reportviewer 的 div):

$(document).ready(function () {
    $('#reportDiv img').removeAttr('class');

});

那么结果如预期。图像没有缩放,一切都很好。然而,问题是这些报告中的一些可能非常大,导致用户没有任何视觉反馈来判断某事是否正在发生。我想继续使用异步渲染,所以我开始查看reportviewer javascript api。

Sys.Application.add_load(function () {
        var reportViewer = $find("ctl00_mainContentPlaceHolder_ReportViewer1");
        reportViewer.add_propertyChanged(viewerPropertyChanged);
    });

function viewerPropertyChanged(sender, e) {
        var viewer = $find("ctl00_mainContentPlaceHolder_ReportViewer1");

        if (e.get_propertyName() === "isLoading") {

            var button = document.getElementById("ctl00_mainContentPlaceHolder_ctlReportParamModuleId1_btnRunReport");
            button.disabled = viewer.get_isLoading();
        }
        else {

            if ($find("ctl00_mainContentPlaceHolder_ReportViewer1").get_reportAreaContent() == Microsoft.Reporting.WebFormsClient.ReportAreaContent.ReportPage) {
                alert("here");

            }
        }
    }

第一部分(isLoading)按预期工作,禁用按钮。但是在加载后我立即得到 ​​p>

对象不支持属性或方法'get_reportAreaContent'

我是否遗漏了一些明显的东西?这些是我用来参考的 msdn 的链接:

【问题讨论】:

    标签: javascript reporting-services reportviewer


    【解决方案1】:

    条形图、折线图、饼图等被渲染为图像。图像会根据报表查看器控件的大小重新调整大小。我没有使用AsyncRendering="false",而是创建了这个javascript解决方法,它解决了我的问题。

    var app = Sys.Application;
    app.add_init(ApplicationInit);
    
    function ApplicationInit(sender) {
        var prm = Sys.WebForms.PageRequestManager.getInstance();
        if (!prm.get_isInAsyncPostBack()) {
            prm.add_endRequest(EndRequest)
        }
    }
    
    function EndRequest(sender, args) {
        var reportViewerControlId = "ReportViewer1";
        if (sender._postBackControlClientIDs[0].indexOf(reportViewerControlId) >= 0) {
            var reportViewerControlContainer = "reportViewerContainer"; // Id of <DIV>
            var renderedReportImage = $("#" + reportViewerControlContainer + " img");
            renderedReportImage.removeAttr("style").removeAttr("class");
            var styleAttr = renderedReportImage.attr("style");
            var classAttr = renderedReportImage.attr("class");
            if (typeof styleAttr === 'undefined') {
                console.log("Successfully removed the style attribute from the rendered report image!");
            }
            if (typeof classAttr === 'undefined') {
                console.log("Successfully removed the class attribute from the rendered report image!");
            }
        }
    }
    

    基本上,我正在收听 PageRequestManager 的 endRequest 以获取 ReportViewerControl 的 ID,然后简单地从图像中删除样式和类属性以将其显示为未修改。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多