惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

The GitHub Blog
The GitHub Blog
Jina AI
Jina AI
月光博客
月光博客
博客园 - Franky
小众软件
小众软件
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
V
Visual Studio Blog
有赞技术团队
有赞技术团队
V
V2EX
IT之家
IT之家
阮一峰的网络日志
阮一峰的网络日志
Stack Overflow Blog
Stack Overflow Blog
H
Help Net Security
Apple Machine Learning Research
Apple Machine Learning Research
腾讯CDC
D
DataBreaches.Net
Hugging Face - Blog
Hugging Face - Blog
Martin Fowler
Martin Fowler
罗磊的独立博客
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
WordPress大学
WordPress大学
C
Check Point Blog
Microsoft Azure Blog
Microsoft Azure Blog
Microsoft Security Blog
Microsoft Security Blog

博客园 - 芸

Xtragrid的图片显示 N×N矩阵螺旋打印输出 数组int[],int[,]的区别 转载 使用ActiveReport for .net 进行报表开发 oracle数据库之间的数据拷贝 VS2003 水晶报表服务器端部署 SQL操作全集 合并多行的字符串—oarcle(转) 在网页上使用户按Enter键自动跳到下一控件,并禁止使用鼠标右键和其他快捷键的HTC控件 字符串样式的格式化 oracle 存储过程的基本语法 2007年终总结 主从表XtarGrid设计 JavaScript面向对象 dotNet常用快捷键 最美的十大经典爱情句子 自定义控件脚本校验 在DataGrid中使用单选框 正则表达式收藏
ActiveReport子报表
· 2006-12-30 · via 博客园 - 芸
 

                                   ActiveReport子报表(For .Net

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

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

 

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

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

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

         //定义全局变量

         ActiveReport sub 
= null;

         
private void Detail_Format(object sender, System.EventArgs eArgs)

         
{

              
if(sub == null)

              
{

                   sub 
= new SubReport();

                   sub.DataSource 
= this.DataSource;

                   sub.DataMember 
= "Detail";

                   
this.SubReport1.Report = sub;


              }


         }

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

private void Port9_ReportEnd(object sender, System.EventArgs eArgs)

         
{

              sub.Document.Dispose();

              sub.Dispose();

              sub 
= null;

         }

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

 

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

其做法是:

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

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

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

//定义全局变量

         ActiveReport sub 
= null;

         
private void Detail_Format(object sender, System.EventArgs eArgs)

         
{

//取得当前分组后,当前组的值(装(卸)港值)。

              
string strValue = txbSerial.Value.ToString();

              sub 
= new SubReport();

              
//根据当前组(装(卸)港值)的值对应的货类信息,绑订到子报表

              DataView dv 
= ((DataSet) this.DataSource).Tables["Detail"].DefaultView;

              dv.RowFilter 
= "Serial = '" + strValue + "'";

              sub.DataSource 
= dv;

              
this.SubReport1.Report = sub;

         }

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

private void Port9_ReportEnd(object sender, System.EventArgs eArgs)

         
{

              sub.Document.Dispose();

              sub.Dispose();

              sub 
= null;

}

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