水晶报表

 

主要思路:

将图片以二进制流放入 DataTable 中,传入报表中显示。

 

例子:

1. 建立xml表结构定义:XSDSchema1.xsd

元素(Element):Element1

字段名

数据类型

Image

hexBinary

2. 建立报表 CrystalReport1.rpt

3. 为报表加入数据库连接

选择 Create New Connection / ADO.NET (XML), 选择步骤1建立的文件XSDSchema1.xsd

4. 将 字段 Image 拖入报表中 (是一个IBlobFieldObject对象)

5. 创建 WebForm1.aspx,用于显示报表

6. 将 CrystalReportViewer 拖入 WebForm1.aspx,

7. 在 WebForm1.cs 部分代码如下:

using CrystalDecisions.CrystalReports.Engine;

using CrystalDecisions.Shared;

using System.IO;

 

//获取图片的二进制内容

System.Drawing.Image img;

System.IO.MemoryStream mm = new MemoryStream();

//img 读取图片

...

// Image 对象内容转入 MemoryStream 

img.Save(mm, System.Drawing.Imaging.ImageFormat.Bmp);

// MemoryStream 内容转换为 byte[],放入 DataTable 

DataSet ds = new DataSet();

DataTable dt = new DataTable("Element1"); //与定义元素(Element)同名

dt.Columns.Add("Image", typeof(System.Byte[]) ); //二进制格式

DataRow dr = dt.NewRow();

dr["Image"] = mm.ToArray();  //将 MemoryStream 转换为 byte[]

//将报表文件载入 ReportDocument

ReportDocument m_Rep = new ReportDocument();

m_Rep.Load(Server.MapPath("CrystalReport1.rpt"));

//获取报表中显示图片的对象(图片对象不会随着图片大小自动条件,需要代码控制)

BlobFieldObject imageObject = (BlobFieldObject) m_Rep.ReportDefinition.ReportObjects["Image1"] as BlobFieldObject;

imageObject.Width = img.Width * 15;  //报表中的长宽单位是缇,1像素=15缇

imageObject.Height = img.Height * 15;

// ReportDocument 对象传入 CrystalReportView 中,显示

CrystalReportViewer1.ReportSource = m_Rep;

CrystalReportViewer1.DataBind();

你可能感兴趣的:(水晶报表)