亚洲精华国产精华精华液网站,你懂的,娇生惯养4ph归寻(矜以),丰年经继拇中文3与其他教材比较

技術頻道

娓娓工業
您現在的位置: 中國傳動網 > 技術頻道 > 技術百科 > 嵌入復雜VB報表的實現方法

嵌入復雜VB報表的實現方法

時間:2006-04-24 17:05:00來源:0

導語:?嵌入復雜VB報表的實現方法
1.概述 在許多組態控制軟件中,都提供了報表的功能,可滿足不了各種客戶的報表需求,不可避免的碰到各種各樣的報表。現在大多數組態軟件支持嵌入VB程序,可以再VB平臺下作出報表嵌入到組態程序中。在VB平臺下制作報表大致有兩種選擇:使用VB自帶的Data Report控件和借助第三方軟件。使用Data Report控件有兩點局限:第一DataReport本身提供的控件很少卻功能很弱,與數據環境邦定得太死。第二DataReport沒用提供分欄等復雜的打印功能;借助第三方軟件功能復雜多樣需要學習,需要時間去理解掌握。利用VB本身提供的控件功能也可以輕松設計自己的復雜報表,簡單明了,適用于簡單和復雜報表,與大家共同探討。 2.設計報表紙 設計報表紙的容器(Form)也就是一張白紙,它具有Form.PrintForm功能,利用它作者可以任意發揮,只要在窗體能顯示的內容都可以打印出來,制作打印所見即所得的報表。眾所周知,在窗體上可以放置VB提供的所有控件,如:Lable,TextBox,Line,Imge,MSHFGrid等各種控件,由用程序操作各種控件的結果,用數據庫內的數據填充MSHFGrid,就可以作出圖文并茂的報表。設定報表紙張(form4): 在工程中添加一窗體Form4。設定窗體的大小通與打印紙張大小相同、前景顏色、后景顏色、邊框形式、控制按鈕、滾動條、標題等項目,使窗體顯示為一張“白紙”。程序如下: Private Sub Form4_Load() With Form4 .Appearance = 0 Flat .AutoRedraw = 1 True .BackColor = &H80000005 背景顏色:白色 .BorderStyle = 0 None .Height = 15000 設置頁面的大小,即紙的大小, .Width = 11760 15000,11760相當于A3 .Top = 0 .Left = 0 .ClipControls = 0 False .FillStyle = 0 Solid .Caption = "paper" End With End Sub 3.表頭的設計 表頭包括報表的頁眉、頁腳、頁標題、日期、不規則表頭等。用Lable控件設計報表的題目。用Line控件在紙上畫出不規則表頭。用Lable,TextBox,Imge填充表頭的內容,將標頭內的所有同類的控件選中設定統一屬性。頁眉、頁腳、頁標題、日期、都可以用控件TextBox設計,程序運行時控制控件的顯示內容,可以做出復雜表頭。 4.表體的設計 在窗體上添加控件MSHFlexGrid(Microsoft Hieerarchical FlexGrid),用鼠標拖動邊框,使其占據表體所需的面積,設定其屬性:編框、前景顏色、背景顏色、固定行數,固定列數,滾動條,行寬(若各行高度不一樣,可以在程序中設定各行的高度)。在程序中設定各列的寬度。MSHFlexGrid控件以網格形式顯示Recordset數據,可以將文本、圖片或者文本和圖片放在MSHFlexGrid的任意單元中,Row和Col屬性制定了MSHFlexGrid裝的當前單元。可以在代碼種植訂單前單元,也可以在運行時使用鼠標或者方向鍵來選定當前的單元。Text屬性引用當前單元的內容。很遺憾MSHFlexGrid控件沒用打印功能,只能借助于Form控件的打印功能,實現報表打印。 Begin MSHierarchicalFlexGridLib.MSHFlexGrid MSHFlexGrid1 Height = 10305 設置高度容納一頁所有的行。 Left = 300 TabIndex = 0 Top = 780 Width = 4755 設置寬度容納一頁所有的列。 _ExtentX = 8387 _ExtentY = 18177 _Version = 393216 Rows = 26 設置一頁容納的行數 FixedCols = 0 BackColorFixed = 255 BackColorBkg = -2147483639 GridColor = 8454016 GridColorFixed = 8454143 GridColorUnpopulated= 8421631 GridLines = 1 GridLinesUnpopulated= 3 MergeCells = 4 BorderStyle = 1 設置邊框:有邊框 Appearance = 0 GridLineWidthFixed= 1 BeginProperty Font {0BE35203-8F91-11CE-9DE3-00AA004BB851} Name = "宋體" Size = 12 設置字體的大小,行寬自動設定 Charset = 134 Weight = 400 Underline = 0 False Italic = 0 False Strikethrough = 0 False EndProperty _NumberOfBands = 1 _Band(0).Cols = 2 _Band(0).GridLineWidthBand= 1 End 上段程序是在設置MSHFlexGrid控件屬性自動產生的,以示參考 Sub MsgdWidth(ci As Integer, ccwidth() As Integer, Msgd As MSHFlexGrid) 設置格列的寬度 ci 列數 ccwidth() 容納列寬度的數組,單位使用缺省單位 Dim i As Integer For i = 0 To ci - 1 msgrd.ColWidth(i) = ccwidth(i) Next i End Sub 5.為MSHFlexGrid準備數據 MSHFlexGrid可以與各種數據空間邦定,能夠自動讀取數據。在報表打印中,我們不使用數據邦定,用程序代碼來控制填充MSHFlexGrid控件的每一單元格。使用ADO對象的Recordset來準備數據源,也可以用其他類似的方法獲得數據源的指針。 Sub opendata(t As String, restdata As adodb.Recordset) Dim constring, sqlstring As String Dim recon As adodb.Connection constring="Provider=SQLOLEDB.4;server=Datacenter;database=zbmis;uid=;pwd=" 數據源連接字 sqlstring = "select stid,sbbatchid,stlong from tn_stinfo where ckroundnum=" & ""_ & Trim(t) & "" & "order by stid" 數據篩選指令,t為數據篩選條件 restdata.Open sqlstring, constring, adOpenKeyset, adLockReadOnly 打開數據記錄,獲得記錄集 End Sub 6.填充MSHFlexGrid的單元格 用打開的數據源,填充MSHFlexGrid每一行,每一列,若最后一頁所有的行填充不滿,用“”來填充。若用彩色打印機可以控制每一單元格的顏色,制作多彩的報表。可以在表中單元任意各種添加頁計、總計、序號等數據。 Sub inputmsfh(ri As Integer, ci As Integer, restdata As adodb.Recordset, msgrd As MSHFlexGrid) ri,ci 是MSHFlexGrid的行數和列數 Dim rk, ck As Integer msgrd.Rows = ri + 1 加一行列表頭 msgrd.Cols = ci For rk = 1 To ri With msgrd .Row = rk For ck = 0 To ci - 1 .Col = ck If restdata.EOF Or IsNull(restdata(ck)) Then .Text = "" Else .Text = Trim(restdata(ck)) End If Next ck If restdata.EOF = False Then restdata.MoveNext 控制記錄行將每行填滿, 若記錄到了文件尾或記錄的列內容為null則用“”來填充 End With Next rk End Sub 列表頭的填充 Sub msgrdname(ci As Integer, ccstring() As String, msgrd As MSHFlexGrid) ci 列數 ccstring() 容納列表頭的數組 Dim i As Integer With msgrd msgrd.Cols = ci msgrd.Rows = 1 .Row = 0 For i = 0 To ci - 1 .Col = i .Text = ccstring(i) Next i End With End Sub 7.關于分頁和分欄 首先確定分欄數,若不分欄,窗體Form4頁面上只添加一個控件MSHFlexGrid1;若分兩欄,在窗體Form4頁面上添加兩個并列控件MSHFlexGrid1 ,MSHFlexGrid2;依次類推。下面的程序中支持分三欄以下的格式。各欄之間的距離,可以直接在窗體上確定。其次,計算報表的頁數控制打印的次序。 Private Sub Command1_Click() Dim restdata As New adodb.Recordset Dim t As String 數據篩選條件 Dim ccstring() As String 列標題名稱數組 Dim ccwidth() As Integer 列寬 Dim cc, rc As Integer 一頁的行數rc,頁數cc Dim prc, plc As Integer 頁數prc,攔數plc Dim rctotal As Integer 總行數 Dim prc1, I As Integer t = Form1.TextBox1.Text 從Form1.TextBox1.Text輸入查詢的條件 Call opendata(t, restdata) 打開數據源,獲得記錄集 rctotal = restdata.RecordCount 取出總行數 Print rctotal If rctotal > 0 Then cc = restdata.Fields.Count 取出總列數 ReDim ccstring(3) As String ReDim ccWidth(3) As String plc = 2 設定分兩欄 rc = 30 每頁30行 ccwidth(0)=600 列寬數組初始化,根據列的字符寬度設定列寬度 ccwidth(1)=1600 ccwidth(2)=1800 ccstring(0) = "管號" 列表頭數組初始化 ccstring(1) = "爐批號" ccstring(2) = "米長" prc = Int(rctotal / (rc * plc)) 計算總頁數 prc1 = rctotal Mod (rc * plc) If prc1 > 0 Then prc = prc + 1 restdata.MoveFirst For i = 1 To prc Form4.Text1 = rctotal Select Case plc Case 1 不分欄 Call MsgdWidth(Msgd1 As MSHFlexGrid1) Call msgrdname(cc, ccstring(), Form4.MSHFlexGrid1) Call inputmsfh(rc, cc, restdata, Form4.MSHFlexGrid1) Form4.MSHFlexGrid2.Visible = False Form4.MSHFlexGrid3.Visible = False Case 2 分兩欄 Call MsgdWidth(Msgd1 As MSHFlexGrid1) 第一欄列寬 Call MsgdWidth(Msgd1 As MSHFlexGrid2) 第二欄列寬 Call msgrdname(cc, ccstring(), Form4.MSHFlexGrid1) 第一欄列頭 Call msgrdname(cc, ccstring(), Form4.MSHFlexGrid2) 第二欄列頭 Call inputmsfh(rc, cc, restdata, Form4.MSHFlexGrid1) 第一欄內容 Call inputmsfh(rc, cc, restdata, Form4.MSHFlexGrid2) 第二欄內容 Form4.MSHFlexGrid3.Visible = False Case 3 分三欄 Call MsgdWidth(Msgd1 As MSHFlexGrid1) Call MsgdWidth(Msgd1 As MSHFlexGrid2) Call MsgdWidth(Msgd1 As MSHFlexGrid3) Call msgrdname(cc, ccstring(), Form4.MSHFlexGrid1) Call msgrdname(cc, ccstring(), Form4.MSHFlexGrid2) Call msgrdname(cc, ccstring(), Form4.MSHFlexGrid3) Call inputmsfh(rc, cc, restdata, Form4.MSHFlexGrid1) Call inputmsfh(rc, cc, restdata, Form4.MSHFlexGrid2) Call inputmsfh(rc, cc, restdata, Form4.MSHFlexGrid3) End Select Form4.Show MsgBox ("打印第" & i & "頁" Form4.PrintForm 輸出到系統缺省打印機 Next i Else MsgBox "查無此記錄" End If restdata.Close 關閉記錄 set restdata = Nothing 釋放緩沖區 End Sub 8. 結束語 所有的程序 Mcrosoft Visual Basic 6.0下調試通過,還有許多排錯指令,由于篇幅所限都已去掉,在實際運用中,使用者可以加入,以增強程序的強壯性。若有Bug請來信一起探討。 聯系方式:電話: 0546-8850085 Email: Deckhand@sina100.com 地址:山東省淄博市張店區中埠鎮勝利鋼管有限公司 郵編:255082

標簽:

點贊

分享到:

上一篇:新一代工業控制計算機的產業...

下一篇:微能WIN-V63矢量控制變頻器在...

中國傳動網版權與免責聲明:凡本網注明[來源:中國傳動網]的所有文字、圖片、音視和視頻文件,版權均為中國傳動網(www.siyutn.com)獨家所有。如需轉載請與0755-82949061聯系。任何媒體、網站或個人轉載使用時須注明來源“中國傳動網”,違反者本網將追究其法律責任。

本網轉載并注明其他來源的稿件,均來自互聯網或業內投稿人士,版權屬于原版權人。轉載請保留稿件來源及作者,禁止擅自篡改,違者自負版權法律責任。

網站簡介|會員服務|聯系方式|幫助信息|版權信息|網站地圖|友情鏈接|法律支持|意見反饋|sitemap

傳動網-工業自動化與智能制造的全媒體“互聯網+”創新服務平臺

網站客服服務咨詢采購咨詢媒體合作

Chuandong.com Copyright ?2005 - 2025 ,All Rights Reserved 深圳市奧美大唐廣告有限公司 版權所有
粵ICP備 14004826號 | 營業執照證書 | 不良信息舉報中心 | 粵公網安備 44030402000946號

主站蜘蛛池模板: 双牌县| 平武县| 古田县| 手游| 焦作市| 商城县| 南开区| 晋城| 安岳县| 石渠县| 天水市| 弋阳县| 吴堡县| 清河县| 嘉定区| 太湖县| 乌兰察布市| 卢湾区| 长武县| 锡林浩特市| 蒲城县| 宜宾市| 怀柔区| 大埔区| 扎鲁特旗| 湘西| 若尔盖县| 边坝县| 靖江市| 峡江县| 乌苏市| 偃师市| 肇州县| 钟祥市| 皋兰县| 施秉县| 大埔区| 尉犁县| 白水县| 沈丘县| 宁德市|