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

推荐订阅源

Apple Machine Learning Research
Apple Machine Learning Research
博客园_首页
G
Google Developers Blog
aimingoo的专栏
aimingoo的专栏
罗磊的独立博客
博客园 - 【当耐特】
M
MIT News - Artificial intelligence
D
Docker
博客园 - 三生石上(FineUI控件)
博客园 - 司徒正美
人人都是产品经理
人人都是产品经理
博客园 - 叶小钗
月光博客
月光博客
S
SegmentFault 最新的问题
Jina AI
Jina AI
Blog — PlanetScale
Blog — PlanetScale
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
博客园 - Franky
L
LangChain Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Microsoft Azure Blog
Microsoft Azure Blog
阮一峰的网络日志
阮一峰的网络日志
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Last Week in AI
Last Week in AI

博客园 - Tony.Gong

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

常用分栏帐票印刷

环境:

vs2005+ActiveReportsNet2

AR下载地址:ftp://ftp.datadynamics.com/

学习了前面的换页和换列的方法,下面我们结合这2节知识实际打印一张分栏帐票。

分栏帐票在我们系统中是经常用到的,具体式样如下:

Page 1:

Class:

A

Chinese

Maths

ID

Name

Score

ID

Name

Score

1

Tony

100

1

Tony

99

2

Mary

56

2

Mary

76

3

Tom

76

3

Tom

54

4

John

67

4

John

86

5

Li

54

5

Li

34

Page 2:

Class:

B

Chinese

Maths

ID

Name

Score

ID

Name

Score

6

Zhang

3

6

Zhang

0

7

Wang

100

7

Wang

2

8

Gong

23

8

Gong

56

9

Tian

78

9

Tian

99

10

Jack

87

10

Jack

88

该类型帐票有如下特点:

(1)、分栏帐票的特点是各栏的样式基本相同,只是其中的数据会有所变化。

(2)、分栏帐票的各栏可以是衔接在一起的,即栏间距为0,也可以是分开的。

(3)TitleSubTitle通常是不分栏的,它们会跨越所有的栏。

(4)、帐票的默认栏数应该是固定的,比方说A4纸默认印刷8栏,如果超过8栏可以选择换页,也可以选择超出边界继续印刷(红线)

   这是由代码来控制的。

本节目标:

有如下数据源

Table1

Class

Subject

ID

Name

Score

Chinese

1

Tony

100

Chinese

2

Mary

56

Chinese

3

Tom

76

Chinese

4

John

67

Chinese

5

Li

54

Maths

1

Tony

99

Maths

2

Mary

76

Maths

3

Tom

54

Maths

4

John

86

Maths

5

Li

34

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

最终希望打印成如下帐票:

(1)根据Class换行

(2)根据Subject换列

Page 1:

Class:

A

Chinese

Maths

ID

Name

Score

ID

Name

Score

1

Tony

100

1

Tony

99

2

Mary

56

2

Mary

76

3

Tom

76

3

Tom

54

4

John

67

4

John

86

5

Li

54

5

Li

34

Page 2:

Class:

B

Chinese

Maths

ID

Name

Score

ID

Name

Score

6

Zhang

3

6

Zhang

0

7

Wang

100

7

Wang

2

8

Gong

23

8

Gong

56

9

Tian

78

9

Tian

99

10

Jack

87

10

Jack

88

0,开始之前,先让我们回想一下第3节的内容。

用第3节的方法,

1),添加如下控件

2〕,把GroupHeaderDataField设置成SubjectNewColumn设置成Before

3),把GroupHeader中的ClassNo控件DataField设为Class

4),Detail3个控件的DataField 邦定到”ID”,”Name”,”Score”

5),比较特殊的,GroupHeader1Subject这个控件也要设置DataField,设为Subject,这样就可以从数据源中把Subject Name读取出来了

6),DetailColumnCount设为2

ok,让我们看看结果吧!

赫赫,大致要差不多了,主要问题有2个:

1),2Title “Class A” ,由于放在GroupHeader1中,换列的时候重复了2次。

2),还有个问题可能比较难发现。我们没有设置分页,但为啥打印出来帐票分页正常呢?

       恩,我们设置的分列字段是SubjectColumnCount2,而数据源是这样的:

Chinese

1

Tony

100

Chinese

2

Mary

56

Chinese

3

Tom

76

Chinese

4

John

67

Chinese

5

Li

54

Maths

1

Tony

99

Maths

2

Mary

76

Maths

3

Tom

54

Maths

4

John

86

Maths

5

Li

34

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列共10条数据打印好之后,正好Subject改变了,又要换列,而该页已经打满了,所以系统自动换页了。

让我们看看,假如Class A不学maths的话会发生什么情况?

数据源变成这样:

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

结果由于没有强制根据Class换页,导致Class AClass B的数据打印在一列上了:

要解决这2个问题,一般有2种方法:

1)增加一个GroupHeader/GroupFooter用于放Title;同时用来控制换页。这样,就有1个group换页,1个group换列了。

2)用子报表

本节我们使用第一种方案。第二种方案下节讨论。

1,先准备数据源:

数据源可以在后台取数的时候就组织好,也可以到前台再组织数据。

2,创建一个AR模版(rpt1.rpx)

GroupHeader1:

       DataField=Class

       NewPage=Before

       ColumnLayout=False

ColumnLayout是分栏帐票中一个很重要的属性,当ColumnLayout设置为True的时候GroupHeader将与Detail一起换栏,当设置为FalseGroupHeader将跨越所有栏。

              此处因为该Group不需要换列,所以设置成False

GroupHeader2:

       DataField=Subject

       NewColumn=Before

其余控件属性不变。

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

Private Sub Form1_Load(ByVal sender As ObjectByVal e As System.EventArgs) Handles Me.Load'Show the table1

        
Dim 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 Class,subject,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

4ok!再御览看看,搞定收工。


本节代码下载:https://files.cnblogs.com/batoosai/SimpleExample5.rar

下一节用子报表的方式实现该帐票。