.net对象模式下(Push模式),水晶报表使用的一些经验

(作者: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/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

turbocc

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值