2

有谁知道如何获取保存在数据库中的 AI 图像并将其显示在 ReportViewer 2008 上?

谢谢!!

4

1 回答 1

1

我目前正在这样做,但是,这并不容易实现。

我创建了一个在 MemoryStream 中生成 RDLC 文件的类。RDLC 内存流被发送到 reportViewer 控件,该控件依次显示报表。

在生成 RDLC 文件期间,您可以创建嵌入图像。为此,我将图像检索到 Byte 数组中,然后将 Byte 数组转换为 Base64 编码。RDLC 文件需要 Base64 编码才能正确显示图像。

同样,这并不容易实现,所以你真的需要这样做才能实现它。如果您想继续使用此方法,我可以为您提供更多详细信息。

编辑(更多细节)

您可以在GotReportViewer获得一些关于如何动态创建 RDLC 文件的示例代码。直接链接到VB.NETC#的代码。

如果您能够设法弄清楚该代码的工作原理,您将能够生成 RDLC 文件,而无需自己手动创建文件。再次,我需要强调一个事实,即您将进行很多修改才能到达您想要的位置。

现在,为了生成图像,从数据库中检索它。当您从数据库中取回它时(我使用 BLOB),您将获得一个 Byte 数组。Byte 数组保存图像的数据,但 I 不能在其当前状态下使用。要转换它,您可以执行以下操作:

Dim output As String = ""
output = Convert.ToBase64String(imgByteArray)

生成的输出字符串将与 ReportViewer 兼容。现在您可以将此字符串动态添加到 ReportViewer 的 RDLC 文件(XML 文件)中。使用 GotReportViewer 中的代码示例,您可以执行以下操作:

  'Inserts embedded images into the report
  Overridable Function CreateEmbeddedImages() As Rdl.EmbeddedImagesType
    Dim bgCell As New Rdl.EmbeddedImageType
    Dim images As New Rdl.EmbeddedImagesType

    bgCell.Name = "bgTableHeader"
    bgCell.Items = New Object() {"image/jpeg", output}
    bgCell.ItemsElementName = New Rdl.ItemsChoiceType35() {Rdl.ItemsChoiceType35.MIMEType, Rdl.ItemsChoiceType35.ImageData}

    images.EmbeddedImage = New Rdl.EmbeddedImageType() {bgCell}
    Return images

  End Function

RDL 类型是报表定义语言类文件。基本上,它是一个反向工程的 RDLC XSD Schema。它包含将用于为您的报告生成有效 XML 文件的类。它包含在顶部的 GotReportViewer 链接中,但您可以使用 Visual Studio 提供的 XSD.EXE 工具自己生成一个。

于 2009-05-05T18:10:16.167 回答