轉(zhuǎn)帖|其它|編輯:郝浩|2011-01-20 15:41:09.000|閱讀 3268 次
概述:本文主要介紹關(guān)于使用ActiveReport報(bào)表的若干問題及解決方法,希望對(duì)大家有幫助。
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
1、打印預(yù)覽時(shí)表格的邊框是很淡的,但打印出來(lái)變成很粗了!請(qǐng)問這如何解決?我打的報(bào)表要求表格的邊框的顏色要很淡,不要太粗!
如果是報(bào)表邊框的話
Me.PageBorder.LeftStyle = ddBLExtraThickSolid
Me.PageBorder.RightStyle = ddBLExtraThickSolid
Me.PageBorder.TopStyle = ddBLDouble
Me.PageBorder.BottomStyle = ddBLDouble
具體粗細(xì)你看吧
我設(shè)置了field的邊框,
Field1.Border.TopStyle = ddBLSolid
Field1.Border.TopColor=顏色
打印預(yù)覽時(shí)候field的邊框的顏色是很淡的,但打印出來(lái)就變成很粗了。這是什么回事?
還有這樣一種情況,就是設(shè)置兩個(gè)相連的字段邊框時(shí),兩個(gè)相交的地方也設(shè)置了兩次,可能會(huì)導(dǎo)致你說(shuō)的問題。如果是這樣的話,只要注意公用邊框只要設(shè)置一次,不要兩個(gè)都設(shè)置。
2、如何在ActiveReport 中控制紙張的規(guī)格?
使用ActiveReport1.Printer.PaperSize屬性來(lái)設(shè)置紙張大小(假定你的ActiveReports控件叫ActiveReport1)。要在事前設(shè)定printdevice=0,再設(shè)置papersize屬性設(shè)置紙張大小。
3、請(qǐng)問如何使用ActiveReport設(shè)計(jì)一個(gè)報(bào)表,內(nèi)有每頁(yè)的各項(xiàng)本頁(yè)總計(jì)和本頁(yè)累計(jì)(累計(jì)到該頁(yè)止的所有記錄的總計(jì)),最后一頁(yè)在本頁(yè)總計(jì)和本頁(yè)累計(jì)再來(lái)一個(gè)各項(xiàng)總計(jì)?
只要加一個(gè)字段,然后設(shè)置字段的SummaryFun屬性為0-Sum,設(shè)置SummaryType為2-PageTotal。進(jìn)行各頁(yè)總計(jì)只需將SummaryType設(shè)為1-GrandTotal就可以了。
每頁(yè)累計(jì)要稍微復(fù)雜一些。首先象上面一樣建立一個(gè)每頁(yè)總計(jì)字段fdPageTotal,再建立一個(gè)字段fdSum,不與任何字段捆綁。我們假定這兩個(gè)字段都放在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打印后,在更新數(shù)據(jù)源后,再次掉用它時(shí),發(fā)現(xiàn)無(wú)法更新它的數(shù)據(jù),它打印的仍是打印第一張時(shí)的數(shù)據(jù)。
在 ActiveReport.PrintReport True前加上一句ActiveReport.Restart 即可。例如:
ActiveReport.Restart
ActiveReport.PrintReport True
5、ACTIVEREPORT 能否向FOXPRO的報(bào)表一樣,添加打印條件,比如若該字段值為0則不打印。
Private Sub Detail_Format()
If txtEmployeeSales.DataValue = 0 Then
lblOutstanding.Visible = False
End If
End Sub
6、我想用VB6.0的報(bào)表設(shè)計(jì)器設(shè)計(jì)發(fā)票這樣的表格。表格里的數(shù)據(jù)是根據(jù)動(dòng)態(tài)的查詢語(yǔ)句從數(shù)據(jù)表中檢索出來(lái)。一張發(fā)票可能對(duì)應(yīng)多種貨物。
用ActiveReport可以很容易地做出發(fā)票樣式的報(bào)表,連發(fā)票中的空白項(xiàng)都能做出來(lái)。
首先在ReportStart事件中設(shè)置數(shù)據(jù)源,建立含有發(fā)票數(shù)據(jù)的單一記錄集,發(fā)票上的每種商品(明細(xì))均為一條記錄,各種抬頭信息(如發(fā)票號(hào),單位, 稅號(hào)等)等應(yīng)當(dāng)包含在每條記錄中(這種重復(fù)信息在報(bào)表中便于分組);同時(shí)使用set me.printer.papersize設(shè)置好紙張大小。
接下來(lái),在設(shè)計(jì)器中建立一個(gè)分組(Group1),將分組字段設(shè)為發(fā)票號(hào),并在分組中放置抬頭字段,畫好抬頭部分的表格線,然后在該分組中再插入一個(gè)分組 (Group2),在其中畫出固定空欄(用于填寫商品明細(xì),具體行數(shù)自已定)的表格線。然后在明細(xì)段(detail)中放置商品明細(xì)字段,不畫表格線。
接下來(lái)關(guān)鍵的一步是:設(shè)置Group2的UnderlayNext屬性為True,它表示下一報(bào)表段(detail)將從本報(bào)表段(Group2)的起始位置開始輸出;同時(shí)設(shè)置detail的backstyle屬性為Transparent(透明)。
運(yùn)行報(bào)表,可能發(fā)現(xiàn)商品明細(xì)顯示的位置不太準(zhǔn)確,這時(shí)可以通過調(diào)節(jié)各報(bào)表段的尾部大小來(lái)調(diào)整,而且還可以調(diào)節(jié)明細(xì)顯示的最大行數(shù),超過可以自動(dòng)生成第二張發(fā)票,當(dāng)然必須設(shè)置group1和group2的repeat屬性為OnPage(即每頁(yè)都顯示)。
7、為什么會(huì)每打印一頁(yè)內(nèi)容總會(huì)間隔一頁(yè)空白的紙張,例如,我要打印兩頁(yè)內(nèi)容,打印機(jī)會(huì)出來(lái)四張紙,其中兩張是空白的。
其實(shí)只要適當(dāng)調(diào)整 PageLeftMargin和PageRightMargin兩個(gè)屬性的值即可。有時(shí)會(huì)看見打印預(yù)覽中會(huì)出現(xiàn)一根紅線,這就是ActiveReport 告訴你要分成兩張紙了。但是,問題就出在這里,有時(shí)這根紅線在紙的邊緣,你根本看不見,所以就導(dǎo)致了你以為不要分頁(yè),但卻分了頁(yè)的結(jié)果。
8、如何獲得打印機(jī)當(dāng)前選定的紙張型號(hào)及尺寸
可以使用Printer對(duì)象的PaperSize獲得紙張型號(hào)(在幫助中有更詳細(xì)的說(shuō)明),使用Printer對(duì)象的Height 和 Width屬性獲得紙張大小。
Printer對(duì)象表示當(dāng)前系統(tǒng)默認(rèn)打印機(jī),如果你想知道它在Printers中的序號(hào),可以使用下面的代碼:
For i = 0 To Printers.Count - 1
If Printers(i).DeviceName = Printer.DeviceName Then
Print i
End If
Next
9、 ActiveReports能橫向預(yù)覽嗎?
可以修改Orientation屬性。
10、如何檢測(cè)系統(tǒng)中是否安裝了打印機(jī)
VB有個(gè)Printers對(duì)象,要知道是否安裝了打印機(jī),只需要看Printers.Count的值就可以了,它表示系統(tǒng)安裝的打印機(jī)的數(shù)目。還有個(gè)打印驅(qū)動(dòng)名稱的屬性Printer.DeviceName="" 表示沒有安裝默認(rèn)打印機(jī)。
11、怎樣設(shè)置上,下,左,右邊距及橫向打印
Dim Act As ActiveReport '設(shè)置紙的類型及尺寸
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 ' 設(shè)置邊寬
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個(gè)屬性是控制頁(yè)邊距的:
PageBottomMargin
PageTopMargin
PageLeftMargin
PageRightMargin
也可以通過ActiveReport的菜單來(lái)更改:File->Page Setup...
12、如何在activereports中實(shí)現(xiàn)手動(dòng)分頁(yè)?
兩種比較簡(jiǎn)單的方法:
1,首先在可能需要分頁(yè)的地方插入分頁(yè)符,然后在代碼中控制它的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
當(dāng)然你可以插入很多分頁(yè)符分別控制.
2,用運(yùn)行時(shí)添加控件的方式在需要時(shí)添加分頁(yè)控件.運(yùn)行時(shí)添加控件的方法請(qǐng)參見AR自帶的VB sample中的Print MS FlexGrid.
13、如何在報(bào)表分組后,分頁(yè)顯示分組后的內(nèi)容,即每頁(yè)只單獨(dú)顯示一種內(nèi)容!
1、設(shè)置frouphead的new page屬性after
2、把Detail往下多拉一點(diǎn),夠長(zhǎng)的時(shí)候就自動(dòng)分頁(yè)了
14、在程序中設(shè)定字段
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
其中,F(xiàn)ldName是細(xì)節(jié)帶區(qū)的一個(gè)Field。rptrs是Recordset,確認(rèn)打開有記錄。報(bào)表也可以顯示出,如果有3條紀(jì)錄,顯示三行,但顯示的不是字段的值,而是FldName的Text屬性值。
report1.FldName.DataField = RptRs.fields(0).name 改成這句試試
15、ActiveRepor做報(bào)表,有一些列是和上一條記錄重復(fù)的,請(qǐng)問能讓這些重復(fù)的列不顯示嗎?
需在隱藏原來(lái)的數(shù)據(jù)字段,然后在上面在一個(gè)Label1來(lái)顯示.
在上面定義一個(gè)局部變量:
private strNN as string
在報(bào)表加在時(shí)
strNN =""
Label1.Caption=""
在Detail_Format事件中
if strNN="" then
strNN=trim(數(shù)據(jù)字段.text)
Label1.Caption=strNN
else
if strNN=trim(數(shù)據(jù)字段.text) then
Label1.Caption= ""
else
strNN=trim(數(shù)據(jù)字段.text)
Label1.Caption=strNN
end if
end if
或者:你可以用代碼實(shí)現(xiàn),在FetchData寫代碼,用一個(gè)數(shù)組變量存儲(chǔ)上一個(gè)記錄,如果發(fā)現(xiàn)當(dāng)前記錄有一個(gè)列與上個(gè)記錄相同,則把該列賦值為空.
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自:網(wǎng)絡(luò)轉(zhuǎn)載