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部分,设置它的visiblefalse

    当到这一页最后一条记录时,设置它的visibletrue

 

下面的是第一次做的代码,命名不规则!!!希望你看得不会累!后来写的代码是用临时记录集的!

 

 

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,设置SummaryType2-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

 

5ACTIVEREPORT 能否向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)中放置商品明细字段,不画表格线。

     接下来关键的一步是:设置Group2UnderlayNext属性为True,它表示下一报表段(detail)将从本报表段(Group2)的起始位置开始输出;同时设置detailbackstyle属性为Transparent(透明)。

     运行报表,可能发现商品明细显示的位置不太准确,这时可以通过调节各报表段的尾部大小来调整,而且还可以调节明细显示的最大行数,超过可以自动生成第二张发票,当然必须设置group1group2repeat属性为OnPage(即每页都显示)。

 

7、为什么会每打印一页内容总会间隔一页空白的纸张,例如,我要打印两页内容,打印机会出来四张纸,其中两张是空白的。

------------------------

其实只要适当调整 PageLeftMarginPageRightMargin两个属性的值即可。有时会看见打印预览中会出现一根红线,这就是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->Page Setup...

 

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、設置froupheadnew 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

rptrsRecordset,确认打开有记录。报表也可以显示出,如果有3条纪录,显示三行,但显示的不是字段的值,而是FldNameText属性值。

 

report1.FldName.DataField = RptRs.fields(0).name 改成這句试试

 

15ActiveRepor做报表,有一些列是和上一条记录重复的,请问能让这些重复的列不显示吗?

---------------------

需在隐藏原来的数据字段,然后在上面在一个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

或者:你可以用代码实现,FetchData写代码,用一个数组变量存储上一个记录,如果发现当前记录有一个列与上个记录相同,则把该列赋值为空

 

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/DJBOY850317/archive/2008/03/31/2234270.aspx

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值