.net对象模式下(Push模式),水晶报表使用的一些经验
2009-03-17 13:33
357 查看
(作者:Turbocc,http://program.turbocc.cn)
以前我很少做财务软件,只是最近的一年里,在某公司开发一个财务处理模块,需要用到报表软件是用C#开发的,那最好不过就选择水晶报表了,以前没有用过,所以这次一用遇到很多问题。由于现在流行开发的都是面向对象ORM开发模式,不像以前表对程序那样天真了。水晶报表有两种开发方式,一种是一种就是水晶报表直接从数据库(数据源)中获取数据,就是水晶报表去拉(Pull),也叫提取;另外一种就是数据库将数据"推(Push)"给水晶报表,首先通过对象模型获取数据库数据,然后报表和对象关联起来,显示对象里的每个属性数据,这个推的关系需要你自己写代码来实现。
利用ORM开发模式开发的程序,一般都会选择Push模式,本人就使用Push模式,先看看代码示例:n)
ReportDocument rdoc = new ReportDocument();
string referencepath = @"BaseInfo/Commission/Report/";
rdoc.Load(referencepath + "DocumentReport.rpt");
rdoc.SetDataSource(Documents);
rdoc.Subreports["DocumentDealPropertyReport.rpt"].SetDataSource(((DocumentInfo)Documents[0]).DealPropertys);
rdoc.Subreports["DocumentOtherPropertyReport.rpt"].SetDataSource(((DocumentInfo)Documents[0]).OtherPropertys);
rdoc.Subreports["DocumentReceivableCommReport.rpt"].SetDataSource(((DocumentInfo)Documents[0]).ReceivableComms);
rdoc.Subreports["DocumentExteriorCommReport.rpt"].SetDataSource(((DocumentInfo)Documents[0]).ExteriorComms);
rdoc.Subreports["DocumentOtherFeeReport.rpt"].SetDataSource(((DocumentInfo)Documents[0]).OtherFees);
rdoc.Subreports["DocumentInteriorReceivableCommReport.rpt"].SetDataSource(((DocumentInfo)Documents[0]).InteriorReceivableComms);
rdoc.Subreports["DocumentInteriorRealCommReport.rpt"].SetDataSource(((DocumentInfo)Documents[0]).InteriorRealComms);
rdoc.Subreports["DocumentInteriorBadCommReport.rpt"].SetDataSource(((DocumentInfo)Documents[0]).InteriorBadComms);
其中Documents是一个继承IList接口的集合类,DocumentDealPropertyReport.rpt、DocumentOtherPropertyReport.rpt、DocumentReceivableCommReport.rpt......都是子表关联主表DocumentReport.rpt的主键Id。
在使用过程中本人遇到了两个非常棘手的问题:
1、报表不断弹出窗口要你输入数据库用户ID和密码,我一直在想,我是类来的,还输入什么密码哦~~~郁闷死了。
2、子报表不断出现关联不到主键Id的问题,更郁闷,在报表里明明设置好关联了,还说不行。
经过本人细心研究,终于知道了。
问题1原因:是由于数据源没有设置不匹配或则数据源没有设置。因为本人在测试过程中,有些子报表没给他添加数据源,就是没给子报表SetDataSource。
问题2原因:是本人在设置报表关联的时候,勾选了 【基于字段选择子报表中的数据】。勾了这个选项,子报表必须要有数据才能和主表关联起来,否则,会出现子报表没有关联主键Id的错误,没勾选子报表会根据主表的类属性来进行匹配。
好了这都是初学Push模式最常见的两个问题,本人总结了。在解决问题过程,本人找到了一个比较适合初学者学习的网站,供大家参考:阿泰的软件实用主义http://babyt.cnblogs.com/
以前我很少做财务软件,只是最近的一年里,在某公司开发一个财务处理模块,需要用到报表软件是用C#开发的,那最好不过就选择水晶报表了,以前没有用过,所以这次一用遇到很多问题。由于现在流行开发的都是面向对象ORM开发模式,不像以前表对程序那样天真了。水晶报表有两种开发方式,一种是一种就是水晶报表直接从数据库(数据源)中获取数据,就是水晶报表去拉(Pull),也叫提取;另外一种就是数据库将数据"推(Push)"给水晶报表,首先通过对象模型获取数据库数据,然后报表和对象关联起来,显示对象里的每个属性数据,这个推的关系需要你自己写代码来实现。
利用ORM开发模式开发的程序,一般都会选择Push模式,本人就使用Push模式,先看看代码示例:n)
ReportDocument rdoc = new ReportDocument();
string referencepath = @"BaseInfo/Commission/Report/";
rdoc.Load(referencepath + "DocumentReport.rpt");
rdoc.SetDataSource(Documents);
rdoc.Subreports["DocumentDealPropertyReport.rpt"].SetDataSource(((DocumentInfo)Documents[0]).DealPropertys);
rdoc.Subreports["DocumentOtherPropertyReport.rpt"].SetDataSource(((DocumentInfo)Documents[0]).OtherPropertys);
rdoc.Subreports["DocumentReceivableCommReport.rpt"].SetDataSource(((DocumentInfo)Documents[0]).ReceivableComms);
rdoc.Subreports["DocumentExteriorCommReport.rpt"].SetDataSource(((DocumentInfo)Documents[0]).ExteriorComms);
rdoc.Subreports["DocumentOtherFeeReport.rpt"].SetDataSource(((DocumentInfo)Documents[0]).OtherFees);
rdoc.Subreports["DocumentInteriorReceivableCommReport.rpt"].SetDataSource(((DocumentInfo)Documents[0]).InteriorReceivableComms);
rdoc.Subreports["DocumentInteriorRealCommReport.rpt"].SetDataSource(((DocumentInfo)Documents[0]).InteriorRealComms);
rdoc.Subreports["DocumentInteriorBadCommReport.rpt"].SetDataSource(((DocumentInfo)Documents[0]).InteriorBadComms);
其中Documents是一个继承IList接口的集合类,DocumentDealPropertyReport.rpt、DocumentOtherPropertyReport.rpt、DocumentReceivableCommReport.rpt......都是子表关联主表DocumentReport.rpt的主键Id。
在使用过程中本人遇到了两个非常棘手的问题:
1、报表不断弹出窗口要你输入数据库用户ID和密码,我一直在想,我是类来的,还输入什么密码哦~~~郁闷死了。
2、子报表不断出现关联不到主键Id的问题,更郁闷,在报表里明明设置好关联了,还说不行。
经过本人细心研究,终于知道了。
问题1原因:是由于数据源没有设置不匹配或则数据源没有设置。因为本人在测试过程中,有些子报表没给他添加数据源,就是没给子报表SetDataSource。
问题2原因:是本人在设置报表关联的时候,勾选了 【基于字段选择子报表中的数据】。勾了这个选项,子报表必须要有数据才能和主表关联起来,否则,会出现子报表没有关联主键Id的错误,没勾选子报表会根据主表的类属性来进行匹配。
好了这都是初学Push模式最常见的两个问题,本人总结了。在解决问题过程,本人找到了一个比较适合初学者学习的网站,供大家参考:阿泰的软件实用主义http://babyt.cnblogs.com/
相关文章推荐
- 水晶报表的一些使用经验(网上来的)
- 水晶报表使用push模式(2)
- access数据库使用水晶报表(PUSH)推模式实现多数据源含子报表的订单打印
- 水晶报表使用push模式(1)
- 水晶报表的使用(1)——动态数据填充技巧[PUSH 模式]
- VS2005中使用水晶报表PUSH模式完成单表的设计
- .net 的水晶报表在push模式下的多表关联问题
- VS2005中使用水晶报表PUSH模式完成主从表设计
- VS2005中使用水晶报表的PUSH模式完成带子报表的报表
- 关于程序调用水晶报表的一些经验
- asp.net水晶报表push模式
- .NET 水晶报表使用代码
- Fastreport使用经验(转)在Delphi程序中访问报表对象
- .NET环境下水晶报表使用总结
- 编写的vs2005水晶报表程序在vs2008下正常使用的一些实现方法
- 水晶报表使用经验总结
- 【转】如何使用代码动态设置水晶报表中的文本,字段等对象呢?
- .NET环境下水晶报表使用总结
- [.net]官方水晶报表的使用以演示下载
- C_.NET下使用水晶报表