一. 打印什么!
- 在做每一个渲染数据表格的查询出来数据的时候,都涉及一个数据的打印,打印在这几
天里面都涉及到,今天呢!就总结一下报表的打印! - 在图1里面就是我要打印的一个表格样式图了,当我点击表格的左上角的绿色按钮的时
候就可以进行一个打印了!
图1 表格样式
二. 创建数据集与犯错点!
- 在打印的时候我们首先就要创建一个数据集才可以,什么是数据集呢!数据集就是我们一
个包含着数据表的一个对象来的,相当于我们Models里面的表对数据库里面的数据操作一
样的道理!为什么现在我要创建一个数据集呢!因为等一下我要在一个报表里面把数据放
进里面! - 在图2里面我们可以看到右边就是一个数据集了,刚开始的时候我们什么都没有的,我们
首先点击鼠标的右键添加一个DataTable,添加到了,就会有一个数据集了,但是里面也是
一个空的数据集,这时我们就要在里面添加一个数据了,把鼠标放进表里面去,然后点击一
下鼠标右键,再次点击添加,就会再次弹出列了,我们就点击一下,就可以添加一个第一个
数据了,这是我们可以把这个列,改一个名称了,我们只需要双击点击一下添加的列的时候
,里面的列就可以允许我们输入名称了,同时头部的名称也是一样的道理,我们也是可以双
击点一下就可以进行一个头部的名称更改了!
图2 数据集
3. 在图2里面我们也可以看到一个蓝色里面的一个Class这个列里面我们还可以清晰的看到
左边的一个数据的下方一个DataType,在这个DataType里面就是列的对应的一个数据类型
了,而这个就是一个关键的地方了,有时候当我们写完了,当我们打印的时候,却有些数据
却不出来,有可能我们查询的时候和查询的数据类型不一致而导致的,这时候我们就要检查
一下我们创建的数据类型和你需要查询出来的数据类型是否一致,如果是不一样的话,就可
在DataType这里更改一下,并且我们查询出来的数据都是要和这里的数据类型一致才可以!
三. 创建报表
1. 我们要选中Reporting里面的CrystalReports来创建报表,创建好之后,我们首先就要点击
一下管理器里面的一个数据库字段的数据库专家,来添加好我们的写好的一个数据集了,当我
们选好之后,再按一下确定就可以!
图3
2. 此时我们在报表里面就可以清晰的可以看到里面包含着五部分了,第一个就是一个报表头,
这个就可用来放一个标题的信息的,此时我们可以把鼠标放在报表里面点击一下鼠标的右键,
这时就会出现一个框,我们再选中第一个的插入,然后又会显示第二个框了,这时我们就可
以选中一个文本对象了,当你选中文本对象的时候,你就出现和图4一样的文本框了,这时
你就可以在标题上方输入你需要的一个标题了!
图4
3. 这时我们就可以在一个报表里面先添加一个我们创建好的一个数据集,怎么添加呢!我们也
是首先通过鼠标点住数据库字段里面的其中一个字段按住进行一个拖动一直拖,拖到详细资
料的下方,当我们放手的时候你就会发现我们拖动的时候是一个,而放手的时候就是二个了
其实在页眉的下方的一个是这一行里面的一个标题而已,而页眉的下方才是一个真正的数据
来的!
图5
4. 当这是我们添加完成后,我们就可以慢慢的进行一个改变了,比如我们想要添加一根线,也是
点击一下鼠标的右键然后再选中插入,这时我们就可以发现里面有很多内容了,其中里面就有
着框,项等等!但你点击的时候就会自动地出现的了,并且插入里面还有些特殊字符,比如打
印的时间等等!都可以添加上去!具体你想要怎样设计!就不多说了!
四. 打印
- 首先我们要打印的话,还得把要打印的数据查询出来并且如果是一个多表查询的话还得要链表
查询同时我们如果要条件查询的或就可以通过判断传过来的值是否有值的了,并且我们就可以
进行一个条件判断了,在图6里面就是一个简单的查询数据了!
图6
2. 接下来就是打印的了,其实打印就分九部分,第一部分DataTable dt = LINQToDataTable(listHerbal)
转化为DataTable类型!就是把查询出出来的数据转化一下类型而已,第二部分PrintReport.ReportDO myDO = new PrintReport.ReportDO()实例化数据集!第三部分myDO.Tables[“数据集里面的数据表的名称”].Merge(dt);把转化后DataTable的数据放进数据集里面的数据表放里面去!第四部分DistributionReport rp = new DistributionReport();实例化报表!第五部分就是:string strRptRath =System.Web.HttpContext.Current.Server.MapPath("~")+“报表的链接”,这个就是获取到报表的一个链接而以,第六部分rp.Load(strRptRath);把报表链接加载到报表哪里! 第七部分:
rp.SetDataSource(dt);设置一下报表的数据原!第八部分就是Stream stream = rp.ExportToStream (CrystalDecisions.Shared.ExportFormatType.PortableDocFormat)这个就是转化为一个IO流的格式!
最后就是返回去return File(stream, “application/pdf”);一定要返回的是一种文件格式!到这一步基本就完成了!如图7所示!
图7
3. 关于调用这个方法!你只需要在视图这边写上一个window.open(),他就可以调用这个方法!
总结:
在这个整一个过程里面我们第一个注意就是打印的第三部分的了,因为我刚刚写的时候,不小心写错了
一个表的名称,结果导致整一个都没有办法打印了,细节是一个导致成功与失败的关键字,在这次总结
里面去我体会到了对一个打印的每一个过程的细节,并且可以加深了该注意的注意点!同时在这次总结
里面也希望可以帮助到你!