首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

【原创】替你的水晶报表加载本地图片

2011-12-25 
【原创】为你的水晶报表加载本地图片本文为解答该贴所做:http://topic.csdn.net/u/20090524/15/911fd15a-32c

【原创】为你的水晶报表加载本地图片
本文为解答该贴所做:http://topic.csdn.net/u/20090524/15/911fd15a-32c6-4be9-9aa1-3ee95365e7e3.html 

并没有什么新内容,主要是如何读取本地图片显示在报表中。

如果是CR XI及以上版本,可以用更简便的方法,参考:水晶报表图片动态加载的另一种简单方案 

本文的方法是:水晶报表中如何动态加载图片(图片文件版本及数据库版本) 中的图片文件版本。

本文适用于VS2003及VS2005自带版本的水晶报表,当然同样适用于CR XI及以上版本,就是烦了点。

本文使用VS2005及自带版本的水晶报表。



在这里,我把命题重新提炼一下:

已经有一个完整的报表,现在报表需要加载一个本地磁盘图片做为logo。报表中的logo随着本地图片的变化自动变化。

一般我们通过插入一个pictureobject来插入磁盘图片,但是插入后,图片就成为报表的一份,达不到变化的目的。
1:首先我们已经有了一个单表的完整水晶报表应用


 

  
2:为了能挂接我们的本地图片,在dataset里新建立一个表mylogo。

里面放上两个字段,字段类型为System.Byte[]或System.sByte[]

注意,默认类型里只有System.Byte和System.SByte,要自己输入的。
这个mylogo就是一个中介,我们把本地图片读到这个表里,水晶报表从这个表里读到图片显示。
 
3:在现有报表里加入一个子报表,数据源就是这个mylogo.


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

 
4:代码段是这样的

 

C# code
//设置数据源信息        DataSet1 ds1 = new DataSet1();        OleDbDataAdapter da = new OleDbDataAdapter();        String connstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath ("~/app_data/test.mdb")+";";        OleDbConnection cn = new OleDbConnection(connstr);        //获取记录集,注意,最终获取的记录集需要与xsd的结构一致!              da = new OleDbDataAdapter("SELECT EmployeeId1 as EmployeeId,EmployeeName1 as EmployeeName From Employee1", cn);        da.Fill(ds1, "Employee");        //把本地图片先写入到数据集        //将图片读到stream,并转换为byte[]        //图片1        FileStream fs1 = new FileStream(@"c:\1.bmp", FileMode.Open, FileAccess.Read);        BinaryReader br1 = new BinaryReader(fs1);                byte[] bt1 = br1.ReadBytes((int)fs1.Length);        //图片2        FileStream fs2 = new FileStream(@"c:\a2.jpg", FileMode.Open, FileAccess.Read);        BinaryReader br2 = new BinaryReader(fs2);        byte[] bt2 = br2.ReadBytes((int)fs2.Length);                fs1.Close();        fs2.Close();        //写入到ds1中(仅1行)        ds1.myLogo.AddmyLogoRow(bt1, bt2);               //以上为数据部分,与报表无关        //-----------------------        //以下为报表部分        //使用报表对象加载报表                string reportPath = Server.MapPath("~/app_data/crystalreport1.rpt");        myReport.Load(reportPath);        //绑定数据集,注意,一个报表用一个数据集。        myReport.SetDataSource(ds1);        CrystalReportViewer1.ReportSource = myReport;

5:效果是这样的



[解决办法]
SF
學習
[解决办法]
收藏了
[解决办法]
学习
[解决办法]
咦? 终于舍得换头像了,好像在哪里见过...


嗯,感觉用push模式做好复杂,我还是用我的pull模式好了;
[解决办法]
这个要收藏一下
阿泰竟然换头像了~~~
话说我竟然没接着你的散分贴,耿耿于怀中……
[解决办法]
这样也行?不错,学习啦...
[解决办法]
学习中
[解决办法]
收藏
[解决办法]
...........................
[解决办法]
在学习
[解决办法]
好强大
------解决方案--------------------


顶一个
[解决办法]
mark
[解决办法]
收藏了
[解决办法]
学习了
[解决办法]
正要搞这玩意儿!
[解决办法]
值的学习
[解决办法]
还没用过图片,学习了
[解决办法]
“dsJob.MyLogoDataTable.AddMyLogoRow(byte, sbyte)”最匹配的重载方法具有一些无效参数
dsjob.MyLogo.AddMyLogoRow(bt1,bt2);
[解决办法]
有点意思,可惜水晶还是复杂了些
[解决办法]
学习了
[解决办法]
太强了,偶像啊
[解决办法]
收藏

[解决办法]
不错,学习
[解决办法]
学习
[解决办法]
学习了,虽然看不懂……
[解决办法]
不错
[解决办法]

引用楼主 babyt 的帖子:
本文为解答该贴所做:http://topic.csdn.net/u/20090524/15/911fd15a-32c6-4be9-9aa1-3ee95365e7e3.html 

并没有什么新内容,主要是如何读取本地图片显示在报表中。

如果是CR XI及以上版本,可以用更简便的方法,参考:水晶报表图片动态加载的另一种简单方案

本文的方法是:水晶报表中如何动态加载图片(图片文件版本及数据库版本) 中的图片文件版本。

本文适用于VS2003及VS2005自带版本的水晶报表,当然同…

[解决办法]
学习了

热点排行