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

推荐订阅源

Google DeepMind News
Google DeepMind News
博客园 - 司徒正美
WordPress大学
WordPress大学
爱范儿
爱范儿
小众软件
小众软件
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
罗磊的独立博客
博客园_首页
V
V2EX
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
T
Tailwind CSS Blog
大猫的无限游戏
大猫的无限游戏
The Cloudflare Blog
MyScale Blog
MyScale Blog
IT之家
IT之家
H
Help Net Security
Blog — PlanetScale
Blog — PlanetScale
Microsoft Security Blog
Microsoft Security Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Recent Announcements
Recent Announcements
F
Fortinet All Blogs
The GitHub Blog
The GitHub Blog
Y
Y Combinator Blog
人人都是产品经理
人人都是产品经理

博客园 - Tony.Gong

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

不好意思,家里事情太多,不常更新blog了。

本随笔讨论一下如何在AR中控制换列打印

环境:

vs2005+ActiveReportsNet2

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

有如下数据源

最终希望打印成:

1,先准备如下数据

2,创建一个AR模版,大致布局与控件如下图:

Detail section 中放2Textbox,分别邦定字段”ID””Name”(修改他们的DataField属性)

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"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,运行程序,帐票将被打印出来。

如图,这时候假如数据过多,多出的数据将会自动到下页显示

5,假如想要数据在一页中换列显示,可以这样做:

       修改DetailColumnCount属性(也可以在代码中动态实现),此处可以修改成你希望每页打印的列数,比如每页2列。

6,如此一页数据打印不下,将换列显示

7,图上的一个小问题,放在GroupHeader中的2title(StudentID,StudentName)没有自动换列,可以修改Groupheader的如下属性:

这里我们选OnColumn或者All都可以(All的话换页换列时都会印刷Groupheader/groupfooter里的内容。

8,最终结果如下:

9,实际开发中,此处还会有一个问题,假如你设置的coulumnCount过大,过多的换列导致一张纸打印不下。比如把coulumnCount设置成5,再把detail拉高一点,御览出来,会出现一条红线。

这样的话,实际打印会根据红线打印2张。假如需要控制的话,可以在代码中根据帐票的PrintWidth textbox控件的width确定Detail.CoulumnCount

10,上面那种换列是被动换列(一页打不下了再换列),假如我们想主动换列(比如一页想打印3列,每列只打印3个生徒),该怎么处理呢?

首先,我们先来看看和换列有关的几个属性:

点中GroupHeader,看属性栏,主要是如下2个属性:

1):DataField:这里的DataField和前面TextboxDataField差不多意思,邦定一个用于换列的字段。在印刷时,一旦DataField的内容变动,就做下面NewColumnNewPage的动作。

2〕:NewColumn:设置是在打印前或者后换列。

由于我们现在数据源也就IDName,我们先把ID放进去试试:

当然,不要忘记把DetailColumnCount设置成3

11,御览的效果

DataField中的换列字段我们设置成了ID,一旦ID的值发生变动,就强制换列,由于ID的值全部不等,所以,打印了一行数据,就强制换列了。

那我们想每列打印3行数据,应该怎么做呢?应该很多人都想到了吧。

12,我们可以在当前的数据源table上,加入1个字段,让这个字段每3次变动一下,然后DataField邦定该字段就可以了。

数据源修改成如下:

ColumnID

ID

Name

0

1

Tony

0

2

Gong

0

3

Tom

1

4

John

1

5

Li

具体代码如下:

    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"Dim adapter As New OleDbDataAdapter(cmd, conn)Dim ds As New DataSet

        adapter.Fill(ds)

'Add column "ColumnID" to table(0)

        
With ds.Tables(0)

            .Columns.Add(

"ColumnID"GetType(Int32))For indexForRows As Int32 = 0 To .Rows.Count - 1

                .Rows(indexForRows)(

"ColumnID"= Math.Truncate(indexForRows / 3)NextEnd WithDim rpt As New rpt1

        rpt.DataSource 

= ds.Tables(0)

        rpt.Run()

Me.Viewer1.Document = rpt.DocumentEnd Sub


 

13,把DataField改成ColumnID之后,再御览,这正是我们需要的结果:

恩,好了,贴图贴的好辛苦啊。
下一篇说换页。

附上本篇的代码:
https://files.cnblogs.com/batoosai/SimpleExample3.rar