我有一些在 (VB) Windows 窗体应用程序中运行的 .RDL 报告。
我想将它作为单个 .EXE 文件分发。
是否可以将 .RDL 文件构建到 .EXE 中?
有一个名为 LocalReport.ReportEmbeddedResource 的美味属性,但这不会将 .RDL 构建到最终文件中。
我有一些在 (VB) Windows 窗体应用程序中运行的 .RDL 报告。
我想将它作为单个 .EXE 文件分发。
是否可以将 .RDL 文件构建到 .EXE 中?
有一个名为 LocalReport.ReportEmbeddedResource 的美味属性,但这不会将 .RDL 构建到最终文件中。
这是最终的解决方案,基于 Wil Burton 在http://social.msdn.microsoft.com/Forums/en-US/f7f92d61-2c23-47e7-b2a3-12ee4ed9fa9a/loading-an-embedded-resource的回复
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
' This is a simplest-possible self-contained example that works!!
Dim data() As Byte = My.Resources.aSimpleReport
Dim reportStream As New IO.MemoryStream
reportStream.Write(data, 0, data.Length)
reportStream.Position = 0
ReportViewer1.ProcessingMode = ProcessingMode.Local
ReportViewer1.LocalReport.LoadReportDefinition(reportStream)
ReportViewer1.RefreshReport()
End Sub
只是为了澄清设置:一个非常简单的(只是一个文本框).RDL 文件称为 aSimpleReport.RDL 作为“现有文件”添加到项目的资源中。
是的。LocalReport.LoadReportDefinition(TextReader) 方法可以接受流。您可以使用 StringReader 从资源或代码中嵌入的常量(字符串)加载报告。
http://msdn.microsoft.com/en-us/library/system.io.stringreader(v=vs.110).aspx
例子:
Const rdl As String = "<Report>" & _
" <DataSets>" & _
" <DataSet Name=""IrrelevantToThisExample"">" & _
" <Query>" & _
" <DataSourceName>DataTableName</DataSourceName>" & _
" <CommandText>SELECT * FROM sys.Tables</CommandText>" & _
" </Query>" & _
" </DataSet>" & _
" </DataSets>" & _
"</Report>"
'the LocalReport.LoadReportDefinition needs to read the string from a stream
'Create a string reader to convert the string into a stream
Using sr As New System.IO.StringReader(rdl)
MyReportViewer.LocalReport.LoadReportDefinition(sr)
sr.Close()
End Using