当前位置: 首页 > 编程日记 > 正文

为你的水晶报表装载本地图片

本文为解答该贴所做: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:代码段是这样的

 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:效果是这样的

相关文章:

asp.net断点续传技术

断点续传的原理 在了解HTTP断点续传的原理之前,先来说说HTTP协议,HTTP协议是一种基于tcp的简单协议,分为请求和回复两种。请求协议是由客户机(浏览器)向服务器(WEB SERVER)提交请求时发送报文的协议。回复协议是由服务器(web server)&#xf…

Linux安装Nodejs

Linux安装Nodejs 阿里云镜像: https://npm.taobao.org/mirrors/node/ 选择所需版本,进行下载。 我这边下载的是:https://npm.taobao.org/mirrors/node/v8.2.1/node-v8.2.1-linux-x64.tar.gz 环境: linux 7.x 目录结构&#xff08…

jQuery-1.样式篇---选择器

jQuery选择器之id选择器 页面的任何操作都需要节点的支撑,开发者如何快速高效的找到指定的节点也是前端开发中的一个重点。jQuery提供了一系列的选择器帮助开发者达到这一目的,让开发者可以更少的处理复杂选择过程与性能优化,更多专注业务逻辑…

CentOS 7 相关命令

Centos 7 相关命令 查看Linux内核/操作系统/CPU # uname -a查看系统位数是64位还是32位 # getconf LONG_BIT检验java是否安装成功 # java -version查询java的执行路径 # which java打开java环境变量的配置文件 # vi /etc/profile配置java环境变量后重新加载配置文件 …

51cto的初体验

注册该网站也有一段时间了,第一次来到这个网站是在一次无意间搜索某个问题的时候进来的,我有一个习惯,就是每次一遇到不懂的问题就会上网搜,看看大家都是怎么解决的,至少到现在用这种方法,我已经解决了不少…

Codeforces Round #550 (Div. 3)E. Median String

把字符串看作是26进制的数,从后往前翻译,那么就可以把两个串变成对应的26进制的数字,那么只要把两个数加起来除以二就得到中间的串对应的数了,同理再转化回来就行了。但是这样会有一个问题就是串的长度有2e5,26的2e5次…

window.print()前端实现打印功能

方法介绍 window.print()方法用于打印当前窗口的内容。 默认打印页面中body里的所有内容。 调用 print() 方法会产生一个打印预览弹框&#xff0c;让用户可以设置打印配置。 1. 打印方法 1.1 打印当前窗口内容 示例demo如下&#xff1a; <!DOCTYPE html> <html la…

.NET 4.0 Interop新特性ICustomQueryInterface (转载)

.NET 4.0 Interop新特性ICustomQueryInterface 在.NET Framework v4.0发布的新功能中&#xff0c;在名字空间System.Runtime.InteropServices新增加了一个叫做ICustomQueryInterface的Interface, 顾名思义&#xff0c;这个Interface的功能就是使得用户可以自己控制QueryInterf…

HTML5 3D旋转图片相册

H5旋转3D相册&#xff0c;鼠标放置暂停&#xff0c;图片灰度级为0&#xff0c;有放大效果。 该实例运用H5和CSS3动画效果&#xff0c;未用javascript。提高了本人对CSS3 新属性的了解及掌握。 完整代码如下&#xff1a; <!DOCTYPE html> <html lang"en">…

DHTML中style的display和visibility属性

DHTML中style的display和visibility属性 display是隐藏该对象&#xff0c;使该对象不占用页面排版空间。document.all("tr1").style.display"block"document.all("tr1").style.display"none" visibility只是在页面上看不见&#xff0c…

多线程共享全局变量以及锁机制

多线程都是在同一个进程中运行的。因此在进程中的全局变量所有线程都是共享的&#xff0c;这就造成一个问题&#xff0c;因为线程执行的顺序是无序的&#xff0c;有可能会造成数据错误&#xff0c;为了解决这个问题&#xff0c; threading提供了一个lock类&#xff0c;这个类可…

HTML DOM Console对象

在开发过程中对程序进行测试&#xff0c;经常使用浏览器控制台输出相关信息&#xff0c;下面详细介绍console对象的相关方法。 Console 对象 提供了访问浏览器调试模式的信息到控制台 1. console.assert()方法 用法&#xff1a;该方法在第一个参数为 false 的情况下会在控制台…

禁止拖放对象文本被选择

禁止拖放对象文本被选择的方法&#xff1a; 1.ie中设置拖放对象的onselectstart返回false&#xff0c;在ff中设置样式MozUserSelect(css:-moz-user-select)为none。 这种方法只能禁止拖放对象本身被选择。 2. ie:document.selection.empty() ff:window.getSelection().removeAl…

线性时间选择问题——分治

问题&#xff1a;求一个n个数的列表中第K个最小的元素。这个数字被称为第K个顺序统计量。问题求解&#xff1a; //对数组元素data[lowhigh]进行分区操作,0号单元不用intpartion(intdata[],intlow,inthigh){ data[0]data[low]; intpivotkeydata[low]; while(low<hig…

谷歌浏览器打不开设置等页面

问题描述 谷歌浏览器打不开任何页面&#xff0c;设置页面也打不开。卸载重装不起作用。 解决方案 方案1&#xff1a;添加启动参数 右击谷歌浏览器快捷方式图标&#xff0c;打开【属性】&#xff0c;在【目标(T)】输入框中追加参数-no-sandbox&#xff0c;即在下图中箭头所指…

Spring注解@Value

本文参考自: https://blog.csdn.net/ryelqy/article/details/77453713 Value能让我们在java代码中使用property文件的属性&#xff0c;使用Value有两种形式: 1、Value("#{configProperties[t1.msgname]}") 2、Value("${t1.msgname}") 这两种形式&#xff0…

201621123055《JAVA程序设计》第七周学习总结

1. 本周学习总结 1.1 思维导图&#xff1a;Java图形界面总结 1.2 可选&#xff1a;使用常规方法总结其他上课内容。 答&#xff1a;GUI监听器&#xff1a;一个事件监听器对象负责处理一类事件 一类事件的每一种发生情况,分别由事件监听器对象中的一个方法来具体处理. 在事件源和…

SQL Server 中print Datetime类型问题

declaredatedatetimesetdate2010-1-1printdateadd(dd,1,date)输出:01 2 2010 12:00AM 输出的是2010年1月2日 上午12:00 咦?那我就纳闷了,我要的是2010年1月2日 上午00:00:00 后发现原来print会将打印的数据类型隐式转换成字符串,所以就输出:01 2 2010 12:00AM这样的结果 我们…

iis上实现虚拟目录

有时候项目中需要 将引用相同的文件 可以再iis上建立虚拟目录 &#xff08;其实就是一个文件夹&#xff09; 比如 temp文件夹在另外的站点上 可以通过虚拟目录 将其引用进来&#xff01;

JavaScript判断对象是否为空对象或空数组

1. 判断一个变量是对象还是数组 首先判断一个变量是对象还是数组&#xff0c;不能使用typeof来判断&#xff0c;因为不管是对象还是数组&#xff0c;使用typeof得到的都是"object"。 可以使用Object.prototype.toString.call()方法。 function isObjOrArr(obj) {if …

python_2开发简单爬虫

2017年12月03日 16:43:01 独行侠的守望 阅读数&#xff1a;204 标签&#xff1a; python爬虫 更多个人分类&#xff1a; Python编辑版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请注明文章链接。 https://blog.csdn.net/xiaoanzi123/article/details/78700863学习地…

Mac下安装Node.js

1> brew install node 2> 查看版本&#xff1a; node --version 学习传送门&#xff1a; http://www.imooc.com/learn/637 菜鸟学习&#xff1a; http://www.runoob.com/nodejs/nodejs-http-server.html 官网&#xff1a;https://nodejs.org/zh-cn/ 转载于:https://www.…

window对象提供的功能之窗口最大化

实现窗口最大化的基本思路是&#xff1a;首先打开一个“中转”页面&#xff0c;在该页面中用window.open方法打开一个最大化的窗口&#xff0c;并且在该窗口中将父窗口关闭。实例如下&#xff1a;ex3.html: 代码 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Trans…

Framework 4.0 新关键字dynamic 之我见(二)

Hi&#xff0c;大家好&#xff0c;随着大家对VS2010的深入了解&#xff0c;对dynamic已经是越来越了解了&#xff0c;何时该用&#xff0c;何时不用已经非常熟悉了&#xff0c;原本不打算再写下去的&#xff0c;但感觉还有点东西需要说说&#xff0c;就简单再说一下吧。 原先以…

JavaScript 数组排序及查找数组中最大值最小值方法

JavaScript 数组排序方法及查找最大值最小值方法1. sort()方法排序1.1 方法介绍1.2 语法&#xff1a;arr.sort([compareFunction])1.3 参数说明1.4 返回值&#xff1a; 排序后的数组。1.5 方法描述2. 最大值/最小值方法2.1 查找数组中的最大值2.1.1 Math.max.apply()方法语法&a…

35个必备的wordpress插件

博客一开始是自己写的小程序&#xff0c;但自己写程序实在太麻烦了&#xff0c;不想写&#xff0c;于是转成了bo-blog&#xff0c;用了几周&#xff0c;感觉还是不太理想&#xff0c;就又转换成了wordpress&#xff0c;这个博客程序也不是什么省油的灯&#xff0c;用起来也不是…

1042. 托普利兹矩阵

描述 “托普利兹矩阵”是指如果从左上角到右下角的同一条主斜线上每个元素都相等的矩阵. 给定一个M x N矩阵&#xff0c;判断是否为“托普利兹矩阵”. matrix 是一个二维整数数组.matrix 的行列范围都为 [1, 20].matrix[i][j] 的整数取值范围为[0, 99].样例 样例 1: 输入: matr…

git控制台指令

git stash: 备份当前的工作区的内容&#xff0c;从最近的一次提交中读取相关内容&#xff0c;让工作区保证和上次提交的内容一致。同时&#xff0c;将当前的工作区内容保存到Git栈中。git stash pop: 从Git栈中读取最近一次保存的内容&#xff0c;恢复工作区的相关内容。由于可…

Web架构师必备能力

最近和几个朋友在谈到时下流行的Web 2.0&#xff0c;也提到了其中最重要的角色——架构师。多方各有争执&#xff0c;不外乎是因为背景和视角的缘故&#xff0c;包括架构一词&#xff0c;本身就从建筑学借鉴而来&#xff0c;至于架构师&#xff0c;则可以简单地从建筑学的设计师…

深入理解C语言-二级指针三种内存模型

二级指针相对于一级指针&#xff0c;显得更难&#xff0c;难在于指针和数组的混合&#xff0c;定义不同类型的二级指针&#xff0c;在使用的时候有着很大的区别 第一种内存模型char *arr[] 若有如下定义 char *arr[] {"abc", "def", "ghi"};这种…