1

我有自定义的 winform 前端,它从用户那里获取参数设置,并为 ssrs 报告构建一个 url,并在 WebBrowser 控件中显示该报告。这很好用,除了我需要计算报告在屏幕上显示所需的时间。

我试过(WebBrowser HTML 文档):

DocumentCompleted 事件- 问题:当加载对话框仍然可见时,它会被调用。

ProgressChanged 事件- 问题:我试图获取文档的就绪状态,但在显示“加载”对话框时它仍显示为已完成。

似乎报告的加载必须是来自 ssrs 服务器的 ajax 调用,所以我现在正在寻找我能做些什么来确定何时发生这种情况。

因此,我需要做的是捕获报表实际显示在 Web 浏览器控件中的时间(而不是显示加载对话框时)。关于如何做到这一点的任何建议?

编辑:这是我尝试过的东西,它似乎第一次起作用,但仍然不对。问题是我触发的 ProgressChanged 事件,我只是使用它来捕获所有页面事件。我在想我想在页面上键入 Async 事件,以便在正确的事件上执行。

样本:

Private Sub ReportDocumentLoaded() Handles wbReportViewer.ProgressChanged
    Dim doc As HtmlDocument = wbReportViewer.Document
    If Not doc Is Nothing Then
        Dim el As HtmlElement = doc.GetElementById("ReportViewerControl_AsyncWait_Wait")
        If Not el Is Nothing Then
            Dim rptStyles = el.Style.Split(";")
            For Each s As String In rptStyles
                If s.ToUpper.Contains("VISIBILITY") Then
                    If s.ToUpper.Contains("HIDDEN") Then
                        MsgBox("Report is displayed" & s)
                    End If
                End If
            Next
        End If
    End If
End Sub 

我在想,对于我的情况,我将不得不通过注入一些 JavaScript 来附加到页面事件。

http://msdn.microsoft.com/en-us/library/bb386417(v=vs.100).aspx

4

1 回答 1

0

与其在 WebBroswer 控件中显示 SSRS,为什么不使用ReportViewer for WinForms呢?我相信它更适合场景。

于 2013-08-06T12:56:17.197 回答