Crystal Report Web Viewer 使用Object Collection做数据源

众所周知,Crystal Report作为一款相当成熟的报表软件能够将数据源等都集成在RPT文件内部,我们在使用的时候只需提供数据库的LogonInfo,RPT文件就会自动帮我们去数据库中取出相应的数据。然而这样相当于将部分业务逻辑集成在了RPT文件内部,如果我们不想这么做,完全可以使用Object Collection作为RPT文件的数据源。

如果我们使用Object Collection作为RPT文件的数据源,那么RPT文件本身不包含任何逻辑,只是纯粹的作为一个Layout来使用。我们以一个公司的损益表为例:
损益表预览
如果我们将报表的每一行作为一个Object,那么我们就要定义class:

  
    
1 public class BPLItem
2 {
3 public string Item { get ; set ; } // 项目
4   public string LineNum { get ; set ; } // 行次
5   public string PBalance { get ; set ; } // 本期数
6   public string YBalance { get ; set ; } // 本年累计数
7   public BPLItem()
8 {
9 }
10 }

然后,在新建rpt文件时我们需要定义一个xml,如下所示:

  
    
1 <? xml version="1.0" encoding="UTF-8" ?>
2   < BPLRPT >
3 < BPLItem Item ="一、主营业务收入" LineNum ="1" PBalance ="" YBalance ="" />
4 < BPLItem Item ="减:主营业务成本" LineNum ="2" PBalance ="1,110,874.61" YBalance ="1,110,874.61" />
5 < BPLItem Item ="营业税金及附加" LineNum ="3" PBalance ="" YBalance ="" />
6 </ BPLRPT >

XML中的属性值只是做个例子,然后我们新建RPT文件新建ADO.NET(XML)的connection,如图所示
创建BPL.RPT


之后在Designer中布置好相应的Layout,如图所示:
BPL
这样,我们的RPT文件就创建好了,在使用Crystal Report Web Viewer时,我们只需:

  
    
string reportPath = Server.MapPath( " RPT/BPL_RPT.rpt " );
ArrayList BPLItems
= PrepareData(); // 获取你的数据,并创建成类BPLItem的ArrayList
ReportDocument BPLReportDoc = new ReportDocument();
BPLReportDoc.Load(reportPath);
BPLReportDoc.SetDataSource(BPLItems);
CrystalReportViewer1.ReportSource
= BPLReportDoc;
这样一来,数据库的登录,以及数据的读取都在PrepareData()这个函数当中进行。

BPLItem

你可能感兴趣的:(Collection)