水晶报表初体验
最近的一个Web项目中,由于有打印和导出成PDF格式的应用,而之前都是通过html语法来直接写的,虽然实现了功能,总有一些瑕疵,了解到水晶报表可以解决之前的问题,So,不得不换成水晶报表来做
今天是我第一次接触水晶报表,之前一直都做服务器开发(网络编程),老实说,有点忐忑,又有点兴奋。
和解决大多数问题一样,先看水晶报表的优点,再看水晶报表的缺点,然后了解资料,园子里面的百来篇我关于水晶报表的,我基本上都看过
优点太多:
1.适合快速开发,能很方便的出各种饼图,柱图,等
2.方便 灵活的导出功能,兼容大多数文件格式
3. 多钟语言的支持
4.齐全的网络资料
5.可以直接访问各种数据源
缺点也不少:
1.不支持png图片透明(我的这个应用也还是有这个问题,因为是电子签名的)
2.执行效率太慢
3.无源码,无真相
经初步了解,水晶报表加载数据有两种方式
1.Pull(拉模式),直连数据库,但要注意连接参数的设置 优点: 方便,快捷 缺点:灵活性太差,适用面窄
2.Push(推模式),该模式允许程序员通过组装在内存中的表来封装数据 当然就更加灵活,丰富多样
使用时遇到几个问题
1.数据源的生成:
举个例子:当我的报表中需要显示多个表的字段,而这些字段又没法在一条SQL语句中查询(当然,可以在内存中构建临时表的方式来做),我只能打破我原有的三层架构,把数据操作层提了上来,通过传输SQL语句的方式来作词组装DataSet
2 {
3 SQLString = "Select ProductCode,ProductName,ProductModel,Unit as Uint,Amount,Price,Amount*Price as Money,Convert(nvarchar(10),DeliveryDate,111) as DeliveryDate,Remark,ContractID From Tbl_Shop Where ContractID=" + m_ContractID;
4 try
5 {
6 connection.Open();
7 System.Data.SqlClient.SqlDataAdapter command = new System.Data.SqlClient.SqlDataAdapter(SQLString, connection);
8 command.Fill(contractDataSet, "ContractDetail");
9 }
10 catch (System.Data.SqlClient.SqlException ex)
11 {
12 throw new Exception(ex.Message);
13 }
14 }
2 {
3 SQLString = "Select CompanyName,Address,CompanyPhone,Fax,Bank,AccountNumber,Heading,Chop From Tbl_CompanyUser Where CompanyID=" + leftComanyID;
4 try
5 {
6 connection.Open();
7 System.Data.SqlClient.SqlDataAdapter command = new System.Data.SqlClient.SqlDataAdapter(SQLString, connection);
8 command.Fill(contractDataSet, "leftCompanyModel");
9 }
10 catch (System.Data.SqlClient.SqlException ex)
11 {
12 throw new Exception(ex.Message);
13 }
14 }
通过类似上面4次组装,才算把数据源给搞定,然后又通过查询单独数据的方式组装了另一个表
temprightSignatureBuff,
templeftChopBuff,
temprightChopBuff);
2.自动补白,由于我的报表是合同报表,用户要求合同产品清单少于7条的时候,能用空白填充
说到这里,不得不感谢一下泰哥, 看了他几个DEMO才稍微了解 报表里面的专家是个什么东西
3.ToolBar图片不显示的问题
这个简单,缺少了文件而已
4.报表中显示图片的问题,这个问题折磨了我长达3个小时
问题其实是个小问题,事情是这样的:
在我的数据文件中,我把四个显示图片的字段做成了一个单独的DataTable,然后就拖到报表中,然后给他们赋值,一切都很快(很享受这感觉,呵呵),到要运行的时候,才突然想起来字段的数据类型没有更改。改过之后,又犯了个错误,没有马上刷新数据集,重新设计报表,最终导致了我长达3个小时的杯具,教训啦· 后来,没办法啊,我就开始写Winform使用报表的Demo,结果 很顺利的就出来了,图片 啥的都显示的好好的。最后,找到问题原因 的时候,都快吐血了,记得星爷的唐伯虎点秋香吗,对 ,就像那样狂喷。
问题解决了,所以记录一下。如果文章有人观赏,请勿拍砖,谢谢!最好是能给点您在这方面更加好的经验,期待。。。
上个DataSet图