有谁知道如何将ai图像保存在数据库中并在ReportViewer 2008上显示?
谢谢!
答案 0 :(得分:1)
我目前正在这样做,但要实现起来并不容易。
我创建了一个在MemoryStream中生成RDLC文件的类。 RDLC内存流将发送到reportViewer控件,该控件又显示报告。
在生成RDLC文件期间,您可以创建嵌入的图像。为此,我将图像检索到Byte数组,然后将Byte数组转换为Base64编码。 RDLC文件需要Base64编码才能正确显示图像。
同样,实现起来并不容易,所以你真的需要这样做才能实现这一目标。如果您想继续使用此方法,我可以为您提供更多详细信息。
编辑(更多细节)
您可以获取有关如何在GotReportViewer动态创建RDLC文件的示例代码。 直接链接到VB.NET和C#的代码。
如果您可以设法弄清楚代码的工作原理,您将能够生成RDLC文件,而不需要自己手动创建文件。同样,我需要强调一个事实,即你将要修补很多东西,以达到你想要的目标。
现在,为了生成图像,请从数据库中检索它。当你从数据库中获取它(我使用BLOB)时,你将获得一个Byte数组。字节数组保存图像的数据,但我不能在其当前状态下使用。要进行转换,您可以执行以下操作:
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架构。它包含将用于为报告生成有效XML文件的类。它包含在GotReportViewer链接顶部,但您可以使用随Visual Studio提供的XSD.EXE工具自己生成一个。