收藏 分享(赏)

activereport报表控件的详细使用说明.docx

上传人:myw993772 文档编号:6321213 上传时间:2019-04-07 格式:DOCX 页数:8 大小:20.45KB
下载 相关 举报
activereport报表控件的详细使用说明.docx_第1页
第1页 / 共8页
activereport报表控件的详细使用说明.docx_第2页
第2页 / 共8页
activereport报表控件的详细使用说明.docx_第3页
第3页 / 共8页
activereport报表控件的详细使用说明.docx_第4页
第4页 / 共8页
activereport报表控件的详细使用说明.docx_第5页
第5页 / 共8页
点击查看更多>>
资源描述

1、推荐activereport 报表控件的详细使用说明 使用 ActiveReport 报表若干问题1.如何判断是否到报表的最后一页2.当报表数据源为空是,如果填充记录,也就是空报表(主要报表是以表格方式)第页 20 行数据!3.以表格形式做报表时,细节和本页合计部分有一部分空间,如何去掉,谢谢!=以下为 CSDN handwolf(初学者)回答1,这一点我也不知道有什么属性可以判断是否到报表的最后一页,但是方法是有的,我以前的方法是控制一页的记录行数,然后根据记录总数计算出总的页数,报表的pageNumber 属性表示当前的页码,比较一下就可以了,然后显示总页数与当前页码的方法如下:-在页脚中

2、添加一个用于显示总页数的 Field 和一个用于显示第几页的 Field2。-显示总页数的 Field1:设置 Summaryrunning 的值为:0(ddsrNone)summaryFunc 的值为 0Summarytype 的值为 4-显示第几页的 Field2:设置 Summaryrunning 的值为:2(ddsrall)summaryFunc 的值为 2Summarytype 的值为 42,这个问题我也遇到过,我的解决方法是程序控制(假设你一页打印 20 行)1)如果记录源空,则可以建一临时记录集,除了允许字段为空外,其他的与原记录源相同,这样可以增加空记录(比如 20 条) ,然

3、后用临时记录集绑定2)如果记录源不空,记录数不能添满一页,想用空记录添满;则可以用如下方法控制:首先,要有变量记录当前打印的是一页中的第几行(如整型的 printline 变量)然后在报表的 Detail_Format()事件中控制是否到达记录集尾,是否打印了 20 行如果打到最后一条记录还没有打完一页,就让帮定的记录集 moveprevious!直到打印完一页!注意:这里的最后一行可要控制好第一次 moveprevious 时,不要进行清空绑定的 field 控件第二次到最后一次 moveprevious 时,一定要清空绑定的 field 控件,否则会一直显示最后一条记录3,你可以将本页合计

4、放在 Detail 部分,设置它的 visible 为 false,当到这一页最后一条记录时,设置它的 visible 为 true,下面的是第一次做的代码,命名不规则!希望你看得不会累!后来写的代码是用临时记录集的!Dim rst As ADODB.RecordsetDim num As Integer 记录已输出的有效记录数 -1Dim bc As Integer 记录所需补的空记录数 ,在变,最后减为 0Dim bc2 As Integer 记录所需补的空记录数 ,一直不变Dim totalPagenum As Integer 记录总页数Dim recordnum As Integer

5、记录总记录数Dim flag As Boolean 控制开关,控制最后一条记录的显示Private Sub ActiveReport_ReportStart()Set rst = GetRecordset(“select * from ymjzjl“) 注意这里的打开方式, recordcount的属性必须可用赋初值num = -1recordnum = rst.RecordCount总记录数bc = 10 - recordnum Mod 10If bc = 10 Thenbc = 0End Ifbc2 = bc 需要补充的行数If bc = 0 ThentotalPagenum = reco

6、rdnum / 10总的页数ElsetotalPagenum = recordnum / 10 + 1End Ifrst.MoveFirstDataControl1.Recordset = rstEnd SubPrivate Sub Detail_Format()PageBreak1.Enabled = False PageBreak1 用来控制一页只显示 10 条记录num = num + 1 已经打印的行数If num = recordnum - 1 And bc 0 ThenIf flag = True Then Field2.Text = “Field1.Text = “Field3.

7、Text = “Field4.Text = “Field5.Text = “End Ifflag = Truerst.MovePreviousbc = bc - 1 还需打印的空行减 1End IfIf bc = 0 And flag = True ThenField2.Text = “Field1.Text = “Field3.Text = “Field4.Text = “Field5.Text = “End IfIf (num + 1) Mod 10 = 0 ThenIf Me.pageNumber = totalPagenum ThenMsgBox (“Last Page!“) 最后一页

8、的最后一条,这里你可以添加自己的代码End IfIf Not Me.pageNumber = totalPagenum ThenPageBreak1.Enabled = True 一页 10 行打印完毕,换页End IfEnd IfEnd Sub估计没有方便的方法可以得到报表的总页数,因为你的程序可以控制页数,比如,你可以在程序中早点把关联的记录集 movelast,这样就可以早点结束报表,本来要打印 20 张的可以控制在打印 10 张,编译器一般没有这么大的能力可以计算出这个时候报表的总页数!所以,最好的方法还是自己用程序来算出报表的总页数!你可以控制一张纸打印的记录数,同时算出总的记录数,

9、很容易就可以得到你要的总页数了!很遗憾,不能给你找到方便的方法!使用 ActiveReport 报表若干问题 21、打印预览时表格的边框是很淡的,但打印出来变成很粗了!请问这如何解决?我打的报表要求表格的边框的颜色要很淡,不要太粗!-如果是报表边框的话Me.PageBorder.LeftStyle = ddBLExtraThickSolidMe.PageBorder.RightStyle = ddBLExtraThickSolidMe.PageBorder.TopStyle = ddBLDoubleMe.PageBorder.BottomStyle = ddBLDouble 具体粗细你看吧我设

10、置了 field 的边框,Field1.Border.TopStyle = ddBLSolidField1.Border.TopColor=颜色打印预览时候 field 的边框的颜色是很淡的,但打印出来就变成很粗了。这是什么回事?还有这样一种情况,就是设置两个相连的字段边框时,两个相交的地方也设置了两次,可能会导致你说的问题。如果是这样的话,只要注意公用边框只要设置一次,不要两个都设置。2、如何在 ActiveReport 中控制纸张的规格?-使用 ActiveReport1.Printer.PaperSize 属性来设置纸张大小(假定你的 ActiveReports 控件叫ActiveRep

11、ort1)。要在事前设定 printdevice=0,再设置 papersize 属性设置纸张大小。3、请问如何使用 ActiveReport 设计一个报表,内有每页的各项本页总计和本页累计(累计到该页止的所有记录的总计) ,最后一页在本页总计和本页累计再来一个各项总计?-只要加一个字段,然后设置字段的 SummaryFun 属性为 0-Sum,设置 SummaryType 为 2-PageTotal。进行各页总计只需将 SummaryType 设为 1-GrandTotal 就可以了。每页累计要稍微复杂一些。首先象上面一样建立一个每页总计字段 fdPageTotal,再建立一个字段 fdSu

12、m,不与任何字段捆绑。我们假定这两个字段都放在 PageFooter 中。切换到代码部分,在(General)部分定义变量:Dim dblSum As Double然后输入以下代码:Private Sub ActiveReport_ReportStart()dblSum = 0End SubPrivate Sub PageFooter_Format()dblSum = dblSum + fdPageTotalfdSum.DataValue = dblSumEnd Sub4、我在使用 ActiveReports 控件使用,使用 ACTIVEREPORTS1.PrintReport True 打印

13、后,在更新数据源后,再次掉用它时,发现无法更新它的数据,它打印的仍是打印第一张时的数据。-在 ActiveReport.PrintReport True 前加上一句 ActiveReport.Restart 即可。例如:ActiveReport.RestartActiveReport.PrintReport True5、 ACTIVEREPORT 能否向 FOXPRO 的报表一样,添加打印条件,比如若该字段值为 0 则不打印。-Private Sub Detail_Format()If txtEmployeeSales.DataValue = 0 ThenlblOutstanding.Visi

14、ble = FalseEnd IfEnd Sub6、我想用 VB6.0 的报表设计器设计发票这样的表格。表格里的数据是根据动态的查询语句从数据表中检索出来。一张发票可能对应多种货物。-用 ActiveReport 可以很容易地做出发票样式的报表,连发票中的空白项都能做出来。首先在 ReportStart 事件中设置数据源,建立含有发票数据的单一记录集,发票上的每种商品(明细)均为一条记录,各种抬头信息(如发票号,单位,税号等)等应当包含在每条记录中(这种重复信息在报表中便于分组) ;同时使用 set me.printer.papersize 设置好纸张大小。接下来,在设计器中建立一个分组(Gr

15、oup1) ,将分组字段设为发票号,并在分组中放置抬头字段,画好抬头部分的表格线,然后在该分组中再插入一个分组(Group2) ,在其中画出固定空栏(用于填写商品明细,具体行数自已定)的表格线。然后在明细段(detail )中放置商品明细字段,不画表格线。接下来关键的一步是:设置 Group2 的 UnderlayNext 属性为 True,它表示下一报表段(detail )将从本报表段( Group2)的起始位置开始输出;同时设置 detail 的 backstyle 属性为 Transparent(透明) 。运行报表,可能发现商品明细显示的位置不太准确,这时可以通过调节各报表段的尾部大小来

16、调整,而且还可以调节明细显示的最大行数,超过可以自动生成第二张发票,当然必须设置 group1 和 group2 的 repeat 属性为 OnPage(即每页都显示) 。7、为什么会每打印一页内容总会间隔一页空白的纸张,例如 ,我要打印两页内容,打印机会出来四张纸,其中两张是空白的。-其实只要适当调整 PageLeftMargin 和 PageRightMargin 两个属性的值即可。有时会看见打印预览中会出现一根红线,这就是 ActiveReport 告诉你要分成两张纸了。但是,问题就出在这里,有时这根红线在纸的边缘,你根本看不见,所以就导致了你以为不要分页,但却分了页的结果。8、如何获得

17、打印机当前选定的纸张型号及尺寸-可以使用 Printer 对象的 PaperSize 获得纸张型号(在帮助中有更详细的说明) ,使用 Printer对象的 Height 和 Width 属性获得纸张大小。Printer 对象表示当前系统默认打印机,如果你想知道它在 Printers 中的序号,可以使用下面的代码:For i = 0 To Printers.Count - 1If Printers(i).DeviceName = Printer.DeviceName ThenPrint iEnd IfNext9、 ActiveReports 能横向预览吗?-可以修改 Orientation 属性

18、。10、如何检测系统中是否安装了打印机-VB 有个 Printers 对象,要知道是否安装了打印机,只需要看 Printers.Count 的值就可以了,它表示系统安装的打印机的数目。还有个打印驱动名称的属性 Printer.DeviceName=“ 表示没有安装默认打印机。11、怎樣設置上,下,左, 右邊距及橫向打印-Dim Act As ActiveReport 设置纸的类型及尺寸Act.Printer.PaperSize = 255Act.Printer.PaperHeight = 21 / 2.54 * 1440 21cmAct.Printer.PaperWidth = 29 / 2.

19、54 * 1440 29cmAct.PageSettings.LeftMargin = 1 / 2.54 * 1440 1cm 设置边宽 Act.PageSettings.RightMargin = 1 / 2.54 * 1440 1cmAct.PageSettings.TopMargin = 1 / 2.54 * 1440 1cmAct.PageSettings.BottomMargin = 1 / 2.54 * 1440 1cmActiveReport 有如下 4 个属性是控制页边距的:PageBottomMarginPageTopMarginPageLeftMarginPageRight

20、Margin也可以通过 ActiveReport 的菜单来更改: File-Page Setup.12、如何在 activereports 中实现手动分页?-两种比较简单的方法:1,首先在可能需要分页的地方插入分页符,然后在代码中控制它的 Enabled 属性,如:Private Sub PageHeader_Format()Static x As Longx = x + 1Disables the page break for all but the first pageIf x 1 ThenMe.PageBreak1.Enabled = FalseEnd IfEnd Sub当然你可以插入很

21、多分页符分别控制.2,用运行时添加控件的方式在需要时添加分页控件.运行时添加控件的方法请参见 AR 自带的 VB sample 中的 Print MS FlexGrid.13、如何在报表分组后,分页显示分组后的内容,即每页只单独显示一种内容!-1、設置 frouphead 的 new page 屬性 after2、把 Detail 往下多拉一点,够长的时候就自动分页了14、在程序中设定字段-Dim RptRs As ADODB.RecordsetDim ret As IntegerDim report1 As RptTop8Set report1 = New RptTop8report1.Da

22、taControl1.Connection = ADODBConnectionSet report1.DataControl1.Recordset = frmscore.GridEX1.ADORecordsetSet RptRs = frmscore.GridEX1.ADORecordsetreport1.FldName.DataField = RptRs(0)RptRs.MoveFirstreport1.DataControl1.Recordset.MoveFirstreport1.Restartreport1.ItemTitle.Text = “ddddd“ret = MsgBox(“打印

23、?“, vbYesNo + vbQuestion, “提示“)If ret = vbYes Thenreport1.ShowEnd If其中,FldName 是细节带区的一个 Field。rptrs 是 Recordset,确认打开有记录。报表也可以显示出,如果有 3 条纪录,显示三行,但显示的不是字段的值,而是 FldName 的 Text 属性值。report1.FldName.DataField = RptRs.fields(0).name 改成這句试试15、 ActiveRepor 做报表,有一些列是和上一条记录重复的, 请问能让这些重复的列不显示吗?-需在隐藏原来的数据字段,然后在上

24、面在一个 Label1 来显示 .在上面定义一个局部变量:private strNN as string在报表加在时strNN =“Label1.Caption=“在 Detail_Format 事件中if strNN=“ thenstrNN=trim(数据字段.text)Label1.Caption=strNNelseif strNN=trim(数据字段.text) thenLabel1.Caption=“elsestrNN=trim(数据字段.text)Label1.Caption=strNNend ifend if或者:你可以用代码实现,在 FetchData 写代码,用一个数组变量存储上一个记录,如果发现当前记录有一个列与上个记录相同,则把该列赋值为空本文来自 CSDN 博客,转载请标明出处:http:/

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 实用文档 > 说明文书

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报