1.如何判断是否到报表的最后一页
2.当报表数据源为空是,如果填充记录,也就是空报表(主要报表是以表格方式)
第页20行数据!
3.以表格形式做报表时,细节和本页合计部分有一部分空间,如何去掉,谢谢!

解决方案 »

  1.   

    1,这一点我也不知道有什么属性可以判断是否到报表的最后一页,但是方法是有的,我以前 
       的方法是控制一页的记录行数,然后根据记录总数计算出总的页数,报表的pageNumber属
       性表示当前的页码,比较一下就可以了,然后显示总页数与当前页码的方法如下:
             --在页脚中添加一个用于显示总页数的Field和一个用于显示第几页的Field2。
             --显示总页数的Field1:设置Summaryrunning的值为:0(ddsrNone)
                           summaryFunc的值为0
                           Summarytype的值为4
             --显示第几页的Field2:设置Summaryrunning的值为:2(ddsrall)
                          summaryFunc的值为2
                           Summarytype的值为4
      

  2.   

    2,这个问题我也遇到过,我的解决方法是程序控制(假设你一页打印20行)
       1) 如果记录源空,则可以建一临时记录集,除了允许字段为空外,其他的与原记录源
           相同,这样可以增加空记录(比如20条),然后用临时记录集绑定
      
       2) 如果记录源不空,记录数不能添满一页,想用空记录添满;则可以用如下方法控制:       首先,要有变量记录当前打印的是一页中的第几行(如整型的printline变量)       然后在报表的Detail_Format()事件中控制是否到达记录集尾,是否打印了20行       如果打到最后一条记录还没有打完一页,就让帮定的记录集moveprevious!!!直到
           打印完一页!       注意:这里的最后一行可要控制好
                 第一次moveprevious时,不要进行清空绑定的field控件
                 第二次到最后一次moveprevious时,一定要清空绑定的field控件,否则会一直
                 显示最后一条记录
           
      

  3.   

    3,你可以将本页合计放在Detail部分,设置它的visible为false,
       当到这一页最后一条记录时,设置它的visible为true,
      

  4.   

    下面的是第一次做的代码,命名不规则!!!希望你看得不会累!后来写的代码是用临时记录集的!
    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 SubPrivate 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
      

  5.   

    planetike(阿胜),这个我也试过,但是结果不对AReport.pages.count一直比AReport.pagenumber小1 
    如果直接用AReport.pages则会出现错误!
      

  6.   

    估计没有方便的方法可以得到报表的总页数,因为你的程序可以控制页数,比如,你可以在程序中早点把关联的记录集movelast,这样就可以早点结束报表,本来要打印20张的可以控制在打印10张,编译器一般没有这么大的能力可以计算出这个时候报表的总页数!!!所以,最好的方法还是自己用程序来算出报表的总页数!你可以控制一张纸打印的记录数,同时算出总的记录数,很容易就可以得到你要的总页数了!!!很遗憾,不能给你找到方便的方法!!!