activereport报表控件的详细使⽤说明使⽤ActiveReport报表若
⼲问题
使⽤ActiveReport报表若⼲问题
activereport报表控件的详细使⽤说明
使⽤ActiveReport报表若⼲问题
1.如何判断是否到报表的最后⼀页
2.当报表数据源为空是,如果填充记录,也就是空报表(主要报表是以表格⽅式)
第页20⾏数据!
3.以表格形式做报表时,细节和本页合计部分有⼀部分空间,如何去掉,谢谢!
==================
以下为CSDN handwolf(初学者)回答
1,这⼀点我也不知道有什么属性可以判断是否到报表的最后⼀页,但是⽅法是有的,我以前
的⽅法是控制⼀页的记录⾏数,然后根据记录总数计算出总的页数,报表的pageNumber属
性表⽰当前的页码,⽐较⼀下就可以了,然后显⽰总页数与当前页码的⽅法如下:
--在页脚中添加⼀个⽤于显⽰总页数的Field和⼀个⽤于显⽰第⼏页的Field2。
--显⽰总页数的Field1:设置Summaryrunning的值为:0(ddsrNone)
summaryFunc的值为0
Summarytype的值为4
--显⽰第⼏页的Field2:设置Summaryrunning的值为:2(ddsrall)
summaryFunc的值为2
Summarytype的值为4
2,这个问题我也遇到过,我的解决⽅法是程序控制(假设你⼀页打印20⾏)
1)如果记录源空,则可以建⼀临时记录集,除了允许字段为空外,其他的与原记录源
相同,这样可以增加空记录(⽐如20条),然后⽤临时记录集绑定
2)如果记录源不空,记录数不能添满⼀页,想⽤空记录添满;则可以⽤如下⽅法控制:
⾸先,要有变量记录当前打印的是⼀页中的第⼏⾏(如整型的printline变量)
然后在报表的Detail_Format()事件中控制是否到达记录集尾,是否打印了20⾏
如果打到最后⼀条记录还没有打完⼀页,就让帮定的记录集moveprevious!!!直到
打印完⼀页!
注意:这⾥的最后⼀⾏可要控制好
第⼀次moveprevious时,不要进⾏清空绑定的field控件
第⼆次到最后⼀次moveprevious时,⼀定要清空绑定的field控件,否则会⼀直
显⽰最后⼀条记录
3,你可以将本页合计放在Detail部分,设置它的visible为false,
当到这⼀页最后⼀条记录时,设置它的visible为true,
下⾯的是第⼀次做的代码,命名不规则!!!希望你看得不会累!后来写的代码是⽤临时记录集的!
Dim rst As ADODB.Recordset
Dim num As Integer '记录已输出的有效记录数-1
Dim bc As Integer '记录所需补的空记录数,在变,最后减为0
Dim bc2 As Integer '记录所需补的空记录数,⼀直不变
Dim totalPagenum As Integer '记录总页数
Dim recordnum As Integer '记录总记录数
Dim flag As Boolean '控制开关,控制最后⼀条记录的显⽰
Private Sub ActiveReport_ReportStart()
Set rst = GetRecordset("select * from ymjzjl") '注意这⾥的打开⽅式,recordcount
'的属性必须可⽤
'赋初值
num = -1
recordnum = rst.RecordCount'总记录数
bc = 10 - recordnum Mod 10
If bc = 10 Then
bc = 0
End If
bc2 = bc '需要补充的⾏数
If bc = 0 Then
totalPagenum = recordnum / 10'总的页数
Else
totalPagenum = recordnum / 10 + 1
End If
rst.MoveFirst
DataControl1.Recordset = rst
End Sub
Private Sub Detail_Format()
PageBreak1.Enabled = False 'PageBreak1⽤来控制⼀页只显⽰10条记录
num = num + 1 '已经打印的⾏数
If num >= recordnum - 1 And bc > 0 Then
If flag = True Then
Field2.Text = ""
Field1.Text = ""
Field3.Text = ""
Field4.Text = ""
Field5.Text = ""
End If
flag = True
rst.MovePrevious
bc = bc - 1 '还需打印的空⾏减1
End If
If bc = 0 And flag = True Then
Field2.Text = ""
Field1.Text = ""
Field3.Text = ""
Field4.Text = ""
Field5.Text = ""
End If
If (num + 1) Mod 10 = 0 Then
If Me.pageNumber = totalPagenum Then
MsgBox ("Last Page!") '最后⼀页的最后⼀条,这⾥你可以添加⾃⼰的代码
End If
If Not Me.pageNumber = totalPagenum Then
PageBreak1.Enabled = True '⼀页10⾏打印完毕,换页
End If
End If
End Sub
估计没有⽅便的⽅法可以得到报表的总页数,因为你的程序可以控制页数,⽐如,你可以在程序中早点把关联的记录集movelast,这样就可以早点结束报表,本来要打印20张的可以控制在打印10张,编译器⼀般没有这么⼤的能⼒可以计算出这个时候报表的总页数!!!
所以,最好的⽅法还是⾃⼰⽤程序来算出报表的总页数!你可以控制⼀张纸打印的记录数,同时算出总的记录数,很容易就可以得到你要的总页数了!!!
很遗憾,不能给你到⽅便的⽅法!!!
使⽤ActiveReport报表若⼲问题2
控件的使用1、打印预览时表格的边框是很淡的,但打印出来变成很粗了!请问这如何解决?我打的报表要求表格的边框的颜⾊要很淡,不要太粗!
--------------
如果是报表边框的话
Me.PageBorder.LeftStyle = ddBLExtraThickSolid
Me.PageBorder.RightStyle = ddBLExtraThickSolid
Me.PageBorder.TopStyle = ddBLDouble
Me.PageBorder.BottomStyle = ddBLDouble 具体粗细你看吧
我设置了field的边框,
Field1.Border.TopStyle = ddBLSolid
Field1.Border.TopColor=颜⾊
打印预览时候field的边框的颜⾊是很淡的,但打印出来就变成很粗了。这是什么回事?
还有这样⼀种情况,就是设置两个相连的字段边框时,两个相交的地⽅也设置了两次,可能会导致你说的问题。如果是这样的话,只要注意公⽤边框只要设置⼀次,不要两个都设置。
2、如何在ActiveReport 中控制纸张的规格?
------------------
使⽤ActiveReport1.Printer.PaperSize属性来设置纸张⼤⼩(假定你的ActiveReports控件叫ActiveReport1)。要在事前设定printdevice=0,再设置papersize属性设置纸张⼤⼩。
3、请问如何使⽤ActiveReport设计⼀个报表,内有每页的各项本页总计和本页累计(累计到该页⽌的所有记录的总计),最后⼀页在本页总计和本页累计再来⼀个各项总计?
-----------------
只要加⼀个字段,然后设置字段的SummaryFun属性为0-Sum,设置SummaryType为2-PageTotal。进⾏各页总计只需将SummaryType设为1-GrandTotal就可以了。
每页累计要稍微复杂⼀些。⾸先象上⾯⼀样建⽴⼀个每页总计字段fdPageTotal,再建⽴⼀个字段fdSum,不与任何字段捆绑。我们假定这两个字段都放在PageFooter中。切换到代码部分,在(General)部分定义变量:
Dim dblSum As Double
然后输⼊以下代码:
Private Sub ActiveReport_ReportStart()
dblSum = 0
End Sub
Private Sub PageFooter_Format()
dblSum = dblSum + fdPageTotal
fdSum.DataValue = dblSum
End Sub
4、我在使⽤ActiveReports控件使⽤,使⽤ACTIVEREPORTS1.PrintReport True打印后,在更新数据源后,再次掉⽤它时,发现⽆法更新它的数据,它打印的仍是打印第⼀张时的数据。
-------------------
在 ActiveReport.PrintReport True前加上⼀句ActiveReport.Restart 即可。例如:
ActiveReport.Restart
ActiveReport.PrintReport True
5、ACTIVEREPORT 能否向FOXPRO的报表⼀样,添加打印条件,⽐如若该字段值为0则不打印。
-----------------
Private Sub Detail_Format()
If txtEmployeeSales.DataValue = 0 Then
lblOutstanding.Visible = False
End If
End Sub
6、我想⽤VB6.0的报表设计器设计发票这样的表格。表格⾥的数据是根据动态的查询语句从数据表中检索出来。⼀张发票可能对应多种货物。
------------------
⽤ActiveReport可以很容易地做出发票样式的报表,连发票中的空⽩项都能做出来。
⾸先在ReportStart事件中设置数据源,建⽴含有发票数据的单⼀记录集,发票上的每种商品(明细)均为⼀条记录,各种抬头信息(如发票号,单位,税号等)等应当包含在每条记录中(这种重复信息在报表中便于分组);同时使⽤set me.printer.papersize设置好纸张⼤⼩。
接下来,在设计器中建⽴⼀个分组(Group1),将分组字段设为发票号,并在分组中放置抬头字段,画好抬头部分的表格线,然后在该分组中再插⼊⼀个分组(Group2),在其中画出固定空栏(⽤于填写商品明细,具体⾏数⾃已定)的表格线。然后在明细段(detail)中放置商品明细字段,不画表格线。
接下来关键的⼀步是:设置Group2的UnderlayNext属性为True,它表⽰下⼀报表段(detail)将从本报表段(Group2)的起始位置开始输出;同时设置detail的backstyle属性为Transparent(透明)。
运⾏报表,可能发现商品明细显⽰的位置不太准确,这时可以通过调节各报表段的尾部⼤⼩来调整,⽽且还可以调节明细显⽰的最⼤⾏数,超过可以⾃动⽣成第⼆张发票,当然必须设置group1和group2的repeat属性为OnPage(即每页都显⽰)。
7、为什么会每打印⼀页内容总会间隔⼀页空⽩的纸张,例如,我要打印两页内容,打印机会出来四张纸,其中两张是空⽩的。
------------------------
其实只要适当调整 PageLeftMargin和PageRightMargin两个属性的值即可。有时会看见打印预览中会出现⼀根红线,这就是ActiveReport告诉你要分成两张纸了。但是,问题就出在这⾥,有时这根红线在纸的边缘,你根本看不见,所以就导致了你以为不要分页,但却分了页的结果。
8、如何获得打印机当前选定的纸张型号及尺⼨
-----------------------
可以使⽤Printer对象的PaperSize获得纸张型号(在帮助中有更详细的说明),使⽤Printer对象的Height 和 Width属性获得纸张⼤⼩。
Printer对象表⽰当前系统默认打印机,如果你想知道它在Printers中的序号,可以使⽤下⾯的代码:
For i = 0 To Printers.Count - 1
If Printers(i).DeviceName = Printer.DeviceName Then
Print i
End If
Next
9、 ActiveReports能横向预览吗?
-------------------------
可以修改Orientation属性。
10、如何检测系统中是否安装了打印机
----------------------
VB有个Printers对象,要知道是否安装了打印机,只需要看Printers.Count的值就可以了,它表⽰系统安装的打印机的数⽬。还有个打印驱动名称的属性Printer.DeviceName="" 表⽰没有安装默认打印机。
11、怎樣設置上,下,左,右邊距及橫向打印
-----------------
Dim Act As ActiveReport '设置纸的类型及尺⼨
Act.Printer.PaperSize = 255
Act.Printer.PaperHeight = 21 / 2.54 * 1440 '21cm
Act.Printer.PaperWidth = 29 / 2.54 * 1440 '29cm
Act.PageSettings.LeftMargin = 1 / 2.54 * 1440 '1cm ' 设置边宽 Act.PageSettings.RightMargin = 1 / 2.54 * 1440 '1cm
Act.PageSettings.TopMargin = 1 / 2.54 * 1440 '1cm
Act.PageSettings.BottomMargin = 1 / 2.54 * 1440 '1cm
ActiveReport有如下4个属性是控制页边距的:
PageBottomMargin
PageTopMargin
PageLeftMargin
PageRightMargin
也可以通过ActiveReport的菜单来更改:File->
12、如何在activereports中实现⼿动分页?
------------------
两种⽐较简单的⽅法:
1,⾸先在可能需要分页的地⽅插⼊分页符,然后在代码中控制它的Enabled属性,如:
Private Sub PageHeader_Format()
Static x As Long
x = x + 1
'Disables the page break for all but the first page
If x > 1 Then
Me.PageBreak1.Enabled = False
End If
End Sub
当然你可以插⼊很多分页符分别控制.
2,⽤运⾏时添加控件的⽅式在需要时添加分页控件.运⾏时添加控件的⽅法请参见AR⾃带的VB sample中的Print MS FlexGrid.
13、如何在报表分组后,分页显⽰分组后的内容,即每页只单独显⽰⼀种内容!
---------------
1、設置frouphead的new page屬性after
2、把Detail往下多拉⼀点,够长的时候就⾃动分页了
14、在程序中设定字段
-----------------
Dim RptRs As ADODB.Recordset
Dim ret As Integer
Dim report1 As RptTop8
Set report1 = New RptTop8
report1.DataControl1.Connection = ADODBConnection
Set report1.DataControl1.Recordset = frmscore.GridEX1.ADORecordset
Set RptRs = frmscore.GridEX1.ADORecordset
report1.FldName.DataField = RptRs(0)
RptRs.MoveFirst
report1.DataControl1.Recordset.MoveFirst
report1.Restart
report1.ItemTitle.Text = "ddddd"
ret = MsgBox("打印?", vbYesNo + vbQuestion, "提⽰")
If ret = vbYes Then
report1.Show
End If
其中,FldName是细节带区的⼀个Field。
rptrs是Recordset,确认打开有记录。报表也可以显⽰出,如果有3条纪录,显⽰三⾏,但显⽰的不是字段的值,⽽是FldName的Text属性值。
report1.FldName.DataField = RptRs.fields(0).name 改成這句试试
15、ActiveRepor做报表,有⼀些列是和上⼀条记录重复的,请问能让这些重复的列不显⽰吗?
---------------------
需在隐藏原来的数据字段,然后在上⾯在⼀个Label1来显⽰.
在上⾯定义⼀个局部变量:
private strNN as string
在报表加在时
strNN =""
Label1.Caption=""
在Detail_Format事件中
if strNN="" then
strNN=trim(数据字段.text)
Label1.Caption=strNN
else
if strNN=trim(数据字段.text) then
Label1.Caption=""
else
strNN=trim(数据字段.text)
Label1.Caption=strNN
end if
end if
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论