0

我有一些在 (VB) Windows 窗体应用程序中运行的 .RDL 报告。

我想将它作为单个 .EXE 文件分发。

是否可以将 .RDL 文件构建到 .EXE 中?

有一个名为 LocalReport.ReportEmbeddedResource 的美味属性,但这不会将 .RDL 构建到最终文件中。

4

2 回答 2

0

这是最终的解决方案,基于 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 作为“现有文件”添加到项目的资源中。

于 2014-06-07T08:48:33.867 回答
0

是的。LocalReport.LoadReportDefinition(TextReader) 方法可以接受流。您可以使用 StringReader 从资源或代码中嵌入的常量(字符串)加载报告。

http://msdn.microsoft.com/en-us/library/microsoft.reporting.winforms.localreport.loadreportdefinition(v=vs.100).aspx

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
于 2014-06-06T14:44:02.260 回答