水晶报表子报表 push推模式 使用对象集合数据源

遇到一个需求,是做一个程序用来打印一个稍微复杂的表单,有点像快递的发货单,就是里面的货品项目数量是动态增减的,而这种增减的“块”有2个。我客户没 有要求所以我就没做数据持久层,而只是做填单和打印。我采用水晶报表作为打印输出。不能用传统的水晶报表进行推模式绑定,我用的是主子报表的方式。

由 于是第一次用子报表,连绑定都不知道怎么搞,网上采用的更多是用dataset里包含多个datatable的方法进行数据绑定,而我的数据是对象集合的 方式在内存里储存,还是有不少差别。MSDN上也只讲了使用对象集合作为水晶报表的数据源,并没说过子报表的事,我尝试一下发现还是有办法的。

使用对象集合作为数据源和使用dataset方法都是 SetDataSource(),只要集合支持IDataReader或IEnumerable接口,就能进行绑定,我使用的全是范型自然是没问题。范型作为.NET2.0的新东东真是极大的发展了C#作为纯粹面向对象语言的能力,性能上的提升自不用说,对编程的方式也有较大的改进呀。

子报表的数据绑定也比较类似,我参考了网上找到的各种代码,悲哀的发现它们都不适合我(基于ADO.NET的,好象还有BUG)。我异想天开的用 rdDoc.Subreports["ManhourRPT.rpt"]这句,居然就这么简单的取到的子报表对象。

没什么需要多说的了,放出窗口的全部代码,我想对那些需要进行子报表对象集合数据源绑定的程序员来说,还是有一定参考价值:
程序代码 程序代码
    public partial class DocumentPrint : Form
    {
        public DocumentPrint(List<ServiceDocumentsInfo> serviceDocInfo, List<StuffInfo> stuffList, List<ManhourInfo> manhourList)
        {
            InitializeComponent();

            //维修单主报表
            ReportDocument rdDoc = new ReportDocument();
            rdDoc.Load("ServiceDocumentRPT.rpt");
            rdDoc.SetDataSource(serviceDocInfo);

            //材料子报表
            ReportDocument rdStuff = rdDoc.Subreports["StuffRPT.rpt"];
            rdStuff.SetDataSource(stuffList);

            //工时子报表
            ReportDocument rdManhour = rdDoc.Subreports["ManhourRPT.rpt"];
            rdManhour.SetDataSource(manhourList);

            crystalReportViewer1.ReportSource = rdDoc;
        }
    } 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值