但有几个问题: 1, 无法实现让用户在报表页面选择输出格式,即显示对应的Toolbar,然后让用户选择不同的 Export Format; 2, 在代码写的方式,目前已经能实现 HTML / PDF / Excel / Word 方式的输出。 * 之前无法输入Excel ,原来原因仅是因为 ContentType 中的值写的不正规,非"application/excel",而是"application/vnd.ms-excel". Public Function OpenReportWeb(ByVal p_ReportFormat As ReportType, Optional ByVal p_RS_Parameter() As ReportParameter = Nothing) As Byte() nc = New Net.NetworkCredential rs.Url = zUrl Dim credentials() As DataSourceCredentials Dim reportDefinition As Byte() = Nothing Select Case p_ReportFormat Dim sHistoryID As String = Nothing Dim showHideToggle As String = Nothing Dim definition As New DataSourceDefinition Try If Not IsNothing(p_RS_Parameter) Then rs.RequestEncoding = System.Text.UTF8Encoding.UTF8 '======================================================== Dim sContentType As String '======================================================== Catch ex As SoapException Return result
因项目的需要,在VS2003 中调用一个VS 2005 的Reporting Service Report,而无法使用 Report Viewer 控件,故必须使用 Web Service 的方式。最终成功的代码如下:
Dim rs As New ReportingService
Dim nc As System.Net.NetworkCredential
Dim cc As New System.Net.CredentialCache
nc.UserName = sUserName
nc.Password = sPassword
cc.Add(New Uri(zUrl), "NTLM", nc)
rs.Credentials = cc
Dim cc2() As DataSourceCredentials
Dim result As Byte() = Nothing
Dim sFormat As String = "EXCEL" 'OK : HTML4.0 / PDF ; Not OK : MHTML / EXCEL
Case ReportType.HTML
sFormat = "HTML4.0"
Case ReportType.PDF
sFormat = "PDF"
Case ReportType.Excel
sFormat = "EXCEL"
End Select
Dim sDevInfo As String = "<DeviceInfo><Parameters>False</Parameters></DeviceInfo>" '
Dim parameters() As ParameterValue
Dim encoding As String
Dim mimeType As String = "application/excel"
Dim warnings As Warning() = Nothing
Dim reportHistoryParameters As ParameterValue() = Nothing
Dim streamIDs As String() = Nothing
Dim sh As New SessionHeader
rs.SessionHeaderValue = sh
definition.CredentialRetrieval = CredentialRetrievalEnum.Prompt
definition.ConnectString = sConnStr
definition.Enabled = True
definition.Extension = "SQL"
Dim dsDefinition As DataSourceDefinition
Dim strURL As String
Try
dsDefinition = rs.GetDataSourceContents(sReportDataSourceName)
If Not (dsDefinition Is Nothing) Then
dsDefinition.ConnectString = sReportDataSource
dsDefinition.UserName = sSqlLoginID
dsDefinition.Password = sSqlLoginPwd
rs.SetDataSourceContents(sReportDataSourceName, dsDefinition)
End If
Catch ex As Exception
Throw ex
End Try
If p_RS_Parameter.Length > 0 Then
rs.SetReportParameters(sReportName, p_RS_Parameter)
End If
End If
result = rs.Render(sReportName, sFormat, sHistoryID, sDevInfo, Nothing, cc2, showHideToggle, encoding, mimeType, reportHistoryParameters, warnings, streamIDs)
sh.SessionId = rs.SessionHeaderValue.SessionId
'Response.Clear();
HttpContext.Current.Response.ClearHeaders()
HttpContext.Current.Response.ClearContent()
Select Case p_ReportFormat
Case ReportType.HTML
sContentType = "text/html"
Case ReportType.PDF
sContentType = "text/html"
Case ReportType.Excel
sContentType = "application/vnd.ms-excel"
End Select
'="application/ms-excel";//image/JPEG;text/HTML;image/GIF;vnd.ms-excel/ms-word
HttpContext.Current.Response.ContentType = sContentType
HttpContext.Current.Response.AppendHeader("Context-HttpContext.Current.Disposition", "filename='Report'")
HttpContext.Current.Response.BinaryWrite(result)
HttpContext.Current.Response.End()
Throw (ex)
End Try
End Function
不使用 Report Viewer, 实现调用 Reporting Service 来实现直接输出报表。
最新推荐文章于 2019-07-09 16:21:04 发布