水晶报表中如何动态加载图片

本文的方法是:水晶报表中如何动态加载图片图片文件版本及数据库版本) 中的图片文件版本。
本文适用于VS2003及VS2005自带版本的水晶报表,当然同样适用于CR XI及以上版本,就是烦了点。
本文使用VS2005及自带版本的水晶报表。

在这里,我把命题重新提炼一下:
已经有一个完整的报表,现在报表需要加载一个本地磁盘图片做为logo。报表中的logo随着本地图片的变化自动变化。
一般我们通过插入一个pictureobject来插入磁盘图片,但是插入后,图片就成为报表的一份,达不到变化的目的。

1:首先我们已经有了一个单表的完整水晶报表应用


2:为了能挂接我们的本地图片,在dataset里新建立一个表mylogo。
里面放上两个字段,字段类型为System.Byte[]或System.sByte[]
注意,默认类型里只有System.Byte和System.SByte,要自己输入的。

这个mylogo就是一个中介,我们把本地图片读到这个表里,水晶报表从这个表里读到图片显示。

3:在现有报表里加入一个子报表,数据源就是这个mylogo.

把两个字段拖到子报表上。

4:代码段是这样的

 1    // 设置数据源信息
 2          DataSet1 ds1  =   new  DataSet1();
 3          OleDbDataAdapter da  =   new  OleDbDataAdapter();
 4          String connstr  =   " Provider=Microsoft.Jet.OLEDB.4.0;Data Source= "   +  Server.MapPath ( " ~/app_data/test.mdb " ) + " ; " ;
 5          OleDbConnection cn  =   new  OleDbConnection(connstr);
 6 
 7 
 8           // 获取记录集,注意,最终获取的记录集需要与xsd的结构一致!      
 9          da  =   new  OleDbDataAdapter( " SELECT EmployeeId1 as EmployeeId,EmployeeName1 as EmployeeName From Employee1 " , cn);
10          da.Fill(ds1,  " Employee " );
11 
12           // 把本地图片先写入到数据集
13 
14           // 将图片读到stream,并转换为byte[]
15           // 图片1
16          FileStream fs1  =   new  FileStream( @" c:/1.bmp " , FileMode.Open, FileAccess.Read);
17          BinaryReader br1  =   new  BinaryReader(fs1);        
18           byte [] bt1  =  br1.ReadBytes(( int )fs1.Length);
19           // 图片2
20          FileStream fs2  =   new  FileStream( @" c:/a2.jpg " , FileMode.Open, FileAccess.Read);
21          BinaryReader br2  =   new  BinaryReader(fs2);
22           byte [] bt2  =  br2.ReadBytes(( int )fs2.Length);
23          
24          fs1.Close();
25          fs2.Close();
26           // 写入到ds1中(仅1行)
27          ds1.myLogo.AddmyLogoRow(bt1, bt2);
28         
29 
30           // 以上为数据部分,与报表无关
31           // -----------------------------------------------------------
32           // 以下为报表部分
33 
34           // 使用报表对象加载报表
35          
36           string  reportPath  =  Server.MapPath( " ~/app_data/crystalreport1.rpt " );
37          myReport.Load(reportPath);
38           // 绑定数据集,注意,一个报表用一个数据集。
39          myReport.SetDataSource(ds1);
40          CrystalReportViewer1.ReportSource  =  myReport;

 

5:效果是这样的

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值