打印水晶报表

开发工具与关键技术:Visual Studio、MVC
作者:幻奏
撰写时间:2019.5.8

我们在日常生活中常常会打印很多东西,所以我打算讲一下是怎么打印水晶报表的。
打印水晶报表其实和导出差不多,只是有一点不同。打印也用到了多条件查询,我们也要把数据处理一下。
获取查询条件
在这里插入图片描述
判断数据不能为或undefined,然后赋值。
在这里插入图片描述
打开下载窗口,拼接查询到的数据到下载路径。
在这里插入图片描述
这样视图的部分就写完了,控制器那边我们先创建一个数据源,创建文件夹,然后添加新建项。在打开的窗口的左边选择数据,之后在右边选择数据集,
在这里插入图片描述
改名,然后添加。
打开我们新建的那个东西,右键,我们有两种添加数据源的方法,一种是和数据库连接。另一种是自己创建数据表。在这里我们选择第二个DataTable(D),因为我的数据库没有我要的表,所以我们要自己创建。添加了之后我们要给表一个名字,然后添加列,添加完列之后我们在列的那里右键,属性,这里很重要,每个字段的数据类型都要和数据库的一样,要不然会导不进数据的。
搞完了之后我们要安装CrystalReportViewer才会有我下面选中的那个选项。
在这里插入图片描述
同样改名,添加。然后它就会弹出一个窗口,我们选择一个空白的报表,好了后我们在左边的数据库字段那里右键,然后选中自己创建的那张表。
在这里插入图片描述
确定了之后就是设计模板,这我就不说了。我们现在要写控制器那里了。
先写多条件查询,然后筛选(这里不说了)
将查询出来的数据转化为DataTable的格式,然后下面又是打印水晶报表的固定写法了。
1、 实例化数据集
2、 把数据放入数据集中自己创建的那个表格
3、 实例化数据报表
4、 获取报表的路径(自己设计的那个模板)
5、 将报表加载到模板中
6、 设置报表的数据源
7、 将报表转化为文件流输出
最后返回文件到页面。
在这里插入图片描述
由于上面用到了LINQToDataTable这个方法,所以我们要写一下,不过也是固定的写法,它主要是把我们查询出来的数据传到这个方法里面,就会返回DataTable的格式。
下面看下这个方法的代码:

    public DataTable LINQToDataTable<T>(IEnumerable<T> varlist){//定义要返回的DataTable对象DataTable dtReturn = new DataTable();//保存列集合的属性信息数组PropertyInfo[] oProps = null;if (varlist == null)return dtReturn;//安全性检查//循环遍历集合,使用反射获取类型的属性信息foreach (T rec in varlist){//使用反射获取T类型的属性信息,返回一个PropertyInfo类型的集合#regionif (oProps == null){oProps = ((Type)rec.GetType()).GetProperties();//循环PropertyInfo数组foreach (PropertyInfo pi in oProps){//得到属性的类型Type colType = pi.PropertyType;//如果属性为泛型类型if ((colType.IsGenericType) && (colType.GetGenericTypeDefinition() == typeof(Nullable<>))){//获取泛型类型的参数colType = colType.GetGenericArguments()[0];}//将类型的属性名称与属性类型作为DataTable的列数据dtReturn.Columns.Add(pi.Name, colType);}}#endregion//新建一个用于添加到DataTable中的DataRow对象DataRow dr = dtReturn.NewRow();//循环遍历属性集合foreach (PropertyInfo pi in oProps){//为DataRow中的指定列赋值dr[pi.Name] = pi.GetValue(rec, null) == null ? DBNull.Value : pi.GetValue(rec, null);}//将具有结果值的DataRow添加到DataTable集合中dtReturn.Rows.Add(dr);}return dtReturn;//返回DataTable对象}

代码就是这样了,下次你们用的时候直接复制过去就行了,这时水晶报表已经有数据了,这样就OK了,打印水晶报表其实并不复杂,大多数多是固定的写法,我们只要设计好它的模板就行了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/330565.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java提升篇-事务隔离级别和传播机制

转载自 Java提升篇&#xff0d;事务隔离级别和传播机制问题的提出为了保证并发操作数据的正确性及一致性&#xff0c;SQL规范于1992年提出了数据库事务隔离级别。事务隔离级别分类事务隔离级别由低往高可分为以下几类READ UNCOMMITTED&#xff0c;读取未提交的数据。这是最不安…

多个会话对表加表级读锁和表级写锁后的操作权限分析(表级读锁+表级写锁)

【0】README&#xff1a; 不论是加读锁还是写锁&#xff0c;必须要等到其他数据库连接关闭后才可以进行&#xff1b; 【1】添加表级读锁 1.1&#xff09;多会话执行的时序操作分析&#xff1a; 1.2&#xff09;session1执行的具体时序操作&#xff1b; mysql> select * …

如何写登录验证

如何写登录验证 开发工具与关键技术&#xff1a;Visual Studio、MVC 作者&#xff1a;幻奏 撰写时间&#xff1a;2019.05.12我们都知道很多网站都会有登录的界面&#xff0c;目的就是要验证你的账号是否正确&#xff0c;不正确就不能登录&#xff0c;这样就能防止有其他目的的…

关于Java序列化你应该知道的一切

转载自 关于Java序列化你应该知道的一切 什么是序列化 我们的对象并不只是存在内存中&#xff0c;还需要传输网络&#xff0c;或者保存起来下次再加载出来用&#xff0c;所以需要Java序列化技术。 Java序列化技术正是将对象转变成一串由二进制字节组成的数组&#xff0c;可以通…

mysql事务基础+基于innodb的行锁+间隙锁+如何锁定行

【0】README outlines are as follows : 行锁&#xff1b;事务&#xff1b;隔离级别&#xff1b;行锁变表锁&#xff1b;间隙锁&#xff1b;如何锁定一行&#xff1b;行锁总结&#xff1b; 【1】行锁事务存储引擎基础 1、行锁&#xff1a; 偏向于 innodb 存储引擎&#xff0c…

页面跳转、嵌套

页面跳转、嵌套 开发工具与关键技术&#xff1a;Visual Studio、MVC 作者&#xff1a;幻奏 撰写时间&#xff1a;2019.05.16在日常浏览网页的时候&#xff0c;我们常常能看到很多不同样式的网页&#xff0c;其中我们用的最多的应该就是跳转了&#xff0c;点击链接跳转、点击按…

Java高级进阶:自定义ClassLoader

转载自 Java高级进阶&#xff1a;自定义ClassLoader 假如我们的类不在classpath下&#xff0c;而我们又想读取一个自定义的目录下的class&#xff0c;如果做呢&#xff1f; 读取自定义目录的类 示例读取c:/test/com/test.jdk/Key.class这个类。 package com.test.jdk;public…

mysql如何分析sql执行效率和进行效率优化

【0】如何分析mysql中sql执行较慢的问题 步骤1、观察&#xff0c;至少跑一天&#xff0c;看看生产的慢sql情况&#xff1b;步骤2、开启慢查询日志&#xff0c;设置阈值&#xff0c;比如超过5秒钟就是慢sql&#xff0c; 并将它抓取出来&#xff1b;步骤3、explain慢sql分析&…

如何把模型表导入数据库

开发工具与关键技术&#xff1a;Power Designer、SQL 作者&#xff1a;幻奏 撰写时间&#xff1a;2019.05.23事先说明&#xff0c;我只是一个小萌新&#xff0c;我分享的文章是我在学习过程中学到的&#xff0c;不代表全是正确的&#xff0c;所以我要是有什么地方说错了&#x…

解决eclipse中tomcat无法识别maven web项目问题

eclipse工具中导入了maven web项目, 但是tomcat死活都识别不了, maven项目进行了clean install等操作, 但是仍无效, 后在网上搜索到以下答案, 解决问题 1. 右击项目 -> Debug As -> Maven build... 2. 在Goals中填入: -Dwtpversion2.0 eclipse:eclipse 对于WTP(Web Tool…

深入理解CAS算法原理

转载自 深入理解CAS算法原理1、什么是CAS&#xff1f;CAS&#xff1a;Compare and Swap&#xff0c;即比较再交换。jdk5增加了并发包java.util.concurrent.*,其下面的类使用CAS算法实现了区别于synchronouse同步锁的一种乐观锁。JDK 5之前Java语言是靠synchronized关键字保证同…

如何写登录的记住账号

开发工具与关键技术&#xff1a;Visual Studio、MVC 作者&#xff1a;幻奏 撰写时间&#xff1a;2019.05.27上次我把如何登录的代码给写了&#xff0c;却没有写如何记住登录的账号密码&#xff0c;所以现在我就简单的写一下是如何记住账号密码的。 如果我们没写记住密码的话&am…

严重: Error configuring application listener of class org.springframework.web.context.ContextLoaderLis

博主 使用Eclipse 下的Mavn搭建的SSM框架的工程&#xff0c;出现以下错误 严重: Error configuring application listener of class org.springframework.web.context.ContextLoaderListener Java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoad…

java高级应用:线程池全面解析

转载自 java高级应用&#xff1a;线程池全面解析 什么是线程池&#xff1f; 很简单&#xff0c;简单看名字就知道是装有线程的池子&#xff0c;我们可以把要执行的多线程交给线程池来处理&#xff0c;和连接池的概念一样&#xff0c;通过维护一定数量的线程池来达到多个线程的复…

如何用for循环出数据库的数据

开发工具与关键技术&#xff1a;Visual Studio、MVC 作者&#xff1a;幻奏 撰写时间&#xff1a;2019.5.30在客房管理的系统中有很多不同的小格子&#xff0c;它们分别代表了不同的房间&#xff0c;可以动态的显示每间房间的状态&#xff0c;这个就是房态图。有很多系统应该都有…

Maven常见问题之【-Dmaven.multiModuleProjectDirctory system property is not set】

配置jdk时&#xff0c;声明vm参数&#xff0c;如下&#xff0c; 且需要保证 M2_HOME 环境变量已经配置了&#xff0c; 如下&#xff1a; C:\Users\pacoson>echo %M2_HOME% D:\software_cluster\apache-maven-3.3.9 -Dmaven.multiModuleProjectDirectory$M2_HOME

实现java多线程的3种方式,99%人没用过第3种

转载自 实现java多线程的3种方式&#xff0c;99%人没用过第3种 实现多线程的3种方式 1、继承Thread类 看jdk源码可以发现&#xff0c;Thread类其实是实现了Runnable接口的一个实例&#xff0c;继承Thread类后需要重写run方法并通过start方法启动线程。 继承Thread类耦合性太强了…

关于时间类型的问题

开发工具与关键技术&#xff1a;Visual Studio、MVC 作者&#xff1a;幻奏 撰写时间&#xff1a;2019.6.2我在做项目的时候遇到了一个问题&#xff0c;我要把时间显示到表格上&#xff0c;然后我像平常那样写&#xff0c;linq查询&#xff0c;然后返回数据&#xff0c;然后加载…

maven项目不编译xml文件

最近在搭建一个mavenspringMVCmybatis的项目&#xff0c;编译的时候mybatis生成的**Mapper.xml文件总是不编译&#xff08;classes文件夹内没有出现&#xff09;。 解决方法是在maven的pom.xml文件夹<build>标签下增加如下代码&#xff08;build标签的父标签是 project标…

多线程并发神器--ThreadLocal

转载自 多线程并发神器--ThreadLocal什么是ThreadLocal可以理解成线程本地变量&#xff0c;传统的线程对一个变量操作时操作的是同一个对象&#xff0c;也存在线程安全的问题。ThreadLocal是一个变量的本地副本&#xff0c;线程对变量的操作不会影响其他线程。首先看看ThreadLo…