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

推荐订阅源

V
Visual Studio Blog
量子位
大猫的无限游戏
大猫的无限游戏
Hugging Face - Blog
Hugging Face - Blog
S
SegmentFault 最新的问题
Blog — PlanetScale
Blog — PlanetScale
月光博客
月光博客
Google DeepMind News
Google DeepMind News
小众软件
小众软件
WordPress大学
WordPress大学
宝玉的分享
宝玉的分享
MongoDB | Blog
MongoDB | Blog
B
Blog RSS Feed
博客园 - Franky
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
B
Blog
博客园 - 聂微东
The GitHub Blog
The GitHub Blog
Recent Announcements
Recent Announcements
Y
Y Combinator Blog
Microsoft Security Blog
Microsoft Security Blog
雷峰网
雷峰网
Jina AI
Jina AI
酷 壳 – CoolShell
酷 壳 – CoolShell

博客园 - Tony.Gong

新项目中的CC.Net每日编译环境 ActiveReports工作总结12——用Designer控件实现用户自定义报表印刷 ActiveReports工作总结11——麻烦的线线框框 ActiveReports工作总结10——完整的一张成绩一览帐票 ActiveReports工作总结9——打印参数设置 ActiveReports工作总结8——用代码控制布局 ActiveReports工作总结7——常用一览表印刷 今天还有多少人在上班啊? ActiveReports工作总结5——常用分栏帐票印刷 ActiveReports工作总结4——换页打印 ActiveReports工作总结3——换列打印 公司现有产品数据层切换的随想 .net发送邮件的一些技巧 ActiveReports工作总结2——数据源绑定 ActiveReports工作总结1——AR简介 NUnit学习笔记4--单元测试和项目结合的几种方法 成功升级成老爸。。。。 马上要当老爸了。。。。。 委托与事件学习笔记1---什么是委托?
ActiveReports工作总结6——使用子报表
Tony.Gong · 2007-02-17 · via 博客园 - Tony.Gong

使用子报表

环境:

vs2005+ActiveReportsNet2

本节目标:

承接上节,上节用2group的方式打印了普通的分栏帐票。实现了换列换页的三维表示。

本节用子报表的方式来实现该功能。

子报表的功能比上面那个方法来说,更强大,更灵活。复杂帐票一般都得用到子报表。

开始之前,先简单介绍一下子报表的用法。

0,子报表的一般用法如下:

1),先Add一个主模版(rpt1.rpx),若干子模版(这里就建了一个,sub1.rpx)

2),在主模版上放一个SubReport控件(该控件是一个占位符,sub1.rpx的内容将在这里显示),可以放在PageHeaer/Footer,GroupHeader/footerDetail上,这个要视用途来定。这里放在GroupHeader1上。

3),在主模版的GroupHeader1_Format事件(假如你的SubReport放在Detail中,就要用Detail_Format事件了)中,加入代码,生成子报表,并且给子报表设置数据源(这里为简单起见没有设置数据源):

    Private Sub GroupHeader1_Format(ByVal sender As ObjectByVal e As System.EventArgs) Handles GroupHeader1.FormatDim rpt As New sub1()Me.subReport1.Report = rptEnd Sub

4),然后就可以设计你的子报表了,加控件,加代码,和操作主模版一样做法。需要说明的是,子模版中的PageHeaderPageFooter是不起作用的。

5),然后御览,你会看到每页都包含的sub1.rpx的内容。假如你把SubReport控件放在Detail中的话,Detail中的每一行显示,都会把sub1.rpx的内容一起显示出来。

ok,正式开始了

1,先准备如下数据(把数据顺序组织成如下形式)

Chinese

1

Tony

100

Chinese

2

Mary

56

Chinese

3

Tom

76

Chinese

4

John

67

Chinese

5

Li

54

Chinese

6

Zhang

3

Chinese

7

Wang

100

Chinese

8

Gong

23

Chinese

9

Tian

78

Chinese

10

Jack

87

Maths

6

Zhang

0

Maths

7

Wang

2

Maths

8

Gong

56

Maths

9

Tian

99

Maths

10

Jack

88

2,创建一个AR主模版,1个子模版:

主模版(rpt1.rpx)

GroupHeader1中:

GroupHeader1DataField=”Class”

                       NewPage=”before”

ClassNo: DataField=”Class”

SubReport控件:需要注意的是,该控件的Width必须设成和实际要打印的Sub1.rpxwidth一样大,否则sub1.rpx的内容将不能完全显示出来。后面我会专门讲解一下如何在代码中控制各控件width.

子模版1(sub1.rpx)

GroupHeader1: DataField=”Subject”

                      NewColumn=”Before”

       Subject:   DataField=”subject”

Detail: ColumnCount=2

       TextBox:  Datafield=”ID”

       TextBox2:Datafield=”Name”

       TextBox3:DataField=”Score”

3,在formload事件中编写如下代码,把数据源传给模版,并显示模版:

Private Sub Form1_Load(ByVal sender As ObjectByVal e As System.EventArgs) Handles Me.LoadDim conn As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=test.mdb;Persist Security Info=False"Dim cmd As String = "Select * from table1 order by ID"Dim adapter As New OleDbDataAdapter(cmd, conn)Dim ds As New DataSet

        adapter.Fill(ds)

Dim rpt As New rpt1

        rpt.DataSource 

= ds.Tables(0)

        rpt.Run()

Me.Viewer1.Document = rpt.DocumentEnd Sub

4,在rpt1.rpxGroupHeader1_Format事件,编写代码,显示子模版sub1.rpx.

  Private Sub GroupHeader1_Format(ByVal sender As ObjectByVal e As System.EventArgs) Handles GroupHeader1.FormatDim sub1 As New sub1()Me.subReport1.Report = sub1'為子報表設置数据源

        
Dim dv As DataView = New DataView(CType(Me.DataSource, DataTable), "Class='" & Me.Fields("Class").Value.ToString & "'""", DataViewRowState.CurrentRows)Me.subReport1.Report.DataSource = dvEnd Sub

       注意了我这里传给子模版的数据源。

Dim dv As DataView = New DataView(CType(Me.DataSource, DataTable), "Class='" & Me.Fields("Class").Value.ToString & "'""", DataViewRowState.CurrentRows)

       当打印第一页时,我传给子模版的数据源是:

Chinese

1

Tony

100

Chinese

2

Mary

56

Chinese

3

Tom

76

Chinese

4

John

67

Chinese

5

Li

54

       当打印Class=B的第二页时,我传给子模版的数据源变成了:

Chinese

6

Zhang

3

Chinese

7

Wang

100

Chinese

8

Gong

23

Chinese

9

Tian

78

Chinese

10

Jack

87

Maths

6

Zhang

0

Maths

7

Wang

2

Maths

8

Gong

56

Maths

9

Tian

99

Maths

10

Jack

88

5ok,御览看看效果吧。搞定收工。