轉帖|其它|編輯:郝浩|2011-01-20 15:41:09.000|閱讀 3268 次
概述:本文主要介紹關于使用ActiveReport報表的若干問題及解決方法,希望對大家有幫助。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
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->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、設置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
或者:你可以用代碼實現,在FetchData寫代碼,用一個數組變量存儲上一個記錄,如果發現當前記錄有一個列與上個記錄相同,則把該列賦值為空.
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:網絡轉載