ActiveReport子报表

本文介绍如何使用ActiveReport实现主从表数据展示。通过两种不同场景的实例,详细讲解了子报表的设置方法及注意事项。
 

                                   ActiveReport子报表(For .Net)

       如何在ActiveReport显示主从表中的数据呢?使用子报表能够提供很大的灵活性,一般就是主要的信息显示在detail中,但是如果一些报表的Title内容是动态获取的,这时就需要绑订数据。一般要每页的上方都要显示Title就可以放在PageHeader中,只要首页显示的话放在ReportHeader。再把子表的信息放在Detail中。下面要讲的内容都是数据源为有主从关系的DataSet。

第一种报表如下所示,明细部分只是单纯的显示,不需要另外的处理

 

   其中填报单位等信息,是主表的内容,码头泊位信息、总计、出港、进港为明细表内容。该报表的做法是:

       1. 新建报表然后在工具箱上可以看到SubReport控件,拖放一个控件到Detail部分,用此控件来加载子报表。

       2. 再新建一个报表,命名为SubReport1 ,接下来在主报表中写代码,在页面设计器上选中Detail部分,在属性窗口切换到事件栏,双击Format,将会产生Detail_Format事件,下面就要在这个事件里指定子报表控件所要加载的报表。

 

None.gif         //定义全局变量
None.gif

None.gif         ActiveReport sub 
= null;
None.gif
None.gif         
private void Detail_Format(object sender, System.EventArgs eArgs)
None.gif
ExpandedBlockStart.gifContractedBlock.gif         
dot.gif{
InBlock.gif
InBlock.gif              
if(sub == null)
InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif              
dot.gif{
InBlock.gif
InBlock.gif                   sub 
= new SubReport();
InBlock.gif
InBlock.gif                   sub.DataSource 
= this.DataSource;
InBlock.gif
InBlock.gif                   sub.DataMember 
= "Detail";
InBlock.gif
InBlock.gif                   
this.SubReport1.Report = sub;
InBlock.gif
InBlock.gif
ExpandedSubBlockEnd.gif              }

InBlock.gif
ExpandedBlockEnd.gif         }

None.gif

      3. 还有要注意的一点是,在使用完子报表后要将其释放,销毁掉,具体的代码放在主报表的ReportEnd事件中,例如

 

None.gifprivate void Port9_ReportEnd(object sender, System.EventArgs eArgs)
None.gif
ExpandedBlockStart.gifContractedBlock.gif         
dot.gif{
InBlock.gif
InBlock.gif              sub.Document.Dispose();
InBlock.gif
InBlock.gif              sub.Dispose();
InBlock.gif
InBlock.gif              sub 
= null;
InBlock.gif
ExpandedBlockEnd.gif         }

None.gif

 

第二种报表如下所示,明细部分又有不同的分类。

 

其中填报单位、装(卸)货港作为主表的内容,货物分类、总计等其他信息作为明细表的内容,并且主从表于装(卸)货港关联。

其做法是:

   1. 新建报表后,请切插入分组,DataField设为装(卸)货港。

   2. 然后在工具箱上可以看到SubReport控件,拖放一个控件到Detail部分,用此控件来加载子报表。

   3. 再新建一个报表,命名为SubReport1 ,接下来在主报表中写代码,在页面设计器上选中Detail部分,在属性窗口切换到事件栏,双击Format,将会产生Detail_Format事件,下面就要在这个事件里指定子报表控件所要加载的报表。

 

None.gif//定义全局变量
None.gif

None.gif         ActiveReport sub 
= null;
None.gif
None.gif         
private void Detail_Format(object sender, System.EventArgs eArgs)
None.gif
ExpandedBlockStart.gifContractedBlock.gif         
dot.gif{
InBlock.gif
InBlock.gif
//取得当前分组后,当前组的值(装(卸)港值)。
InBlock.gif

InBlock.gif              
string strValue = txbSerial.Value.ToString();
InBlock.gif
InBlock.gif              sub 
= new SubReport();
InBlock.gif
InBlock.gif              
//根据当前组(装(卸)港值)的值对应的货类信息,绑订到子报表
InBlock.gif

InBlock.gif              DataView dv 
= ((DataSet) this.DataSource).Tables["Detail"].DefaultView;
InBlock.gif
InBlock.gif              dv.RowFilter 
= "Serial = '" + strValue + "'";
InBlock.gif
InBlock.gif              sub.DataSource 
= dv;
InBlock.gif
InBlock.gif              
this.SubReport1.Report = sub;
InBlock.gif
ExpandedBlockEnd.gif         }

None.gif

 

4. 在使用完子报表后要将其释放,销毁掉,具体的代码放在主报表的ReportEnd事件中,例如

 

None.gifprivate void Port9_ReportEnd(object sender, System.EventArgs eArgs)
None.gif
ExpandedBlockStart.gifContractedBlock.gif         
dot.gif{
InBlock.gif
InBlock.gif              sub.Document.Dispose();
InBlock.gif
InBlock.gif              sub.Dispose();
InBlock.gif
InBlock.gif              sub 
= null;
InBlock.gif
ExpandedBlockEnd.gif}

None.gif

 

提醒:如果有绑订数据控件放在ReportHeader或者ReportFooter的话,这时在加载报表时,就会报“位置1处没有任何行”的错误,解决方法是:在PageHeader,PageFooter,Detail等部分新增一个以其绑订的字段一样的控件.不知道还有没有其他更好的解决方法。

转载于:https://www.cnblogs.com/kelebing/archive/2006/12/30/608005.html

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值