摘要:本文完整介紹了基于C/S模式開發MIS系統時,利用VB中的MSFlexGrid控件實現數據表格的顯示和維護功能,并給出了一個實例。
關鍵詞:C/S模式;VB;MSFlexGrid控件;MIS
中圖分類號:TP311文獻標識碼:A 文章編號:1009-3044(2008)11-20200-02
1 引言
在開發信息管理系統(Management Information System, MIS)時,需要對大量數據用表格來進行顯示和維護。VB6.0提供的MSFlexGrid控件功能十分強大,它可以顯示二維表數據,同時提供了豐富的單元格屬性設置,使得其操作像Excel表格一樣高度靈活。
綜觀各種文獻,多片面強調MSFlexGrid控件各種單元格屬性的使用,以此來突顯其靈活性,但針對具體系統開發時,詳細介紹其使用步驟,使用方法的文獻卻沒有,這給借鑒使用帶來了不變。本文在此背景下,結合筆者為一中外合資企業開發的MIS系統,完整的介紹了MSFlexGrid控件的使用方法及步驟,并給出了其實現的關鍵部分代碼。
2 MSFlexGrid控件的使用
2.1 數據表的建立
MSFlexGrid控件使用時,首先要解決的是表頭顯示和列寬問題。為解決這一問題,在Server端SQL Server 2000數據庫中建立了一個Tab_FieldIndex表,用于存儲窗體上MsFlexGrid控件所要顯示的表頭標題及列寬等信息。Tab_FieldIndex表的結構如表1所示,并將strFrmName和lngFieldName兩字段設置為主鍵。
2.2 公共模塊
為了使用MSFlexGrid控件,首先得添加該控件。其添加方法為:在菜單“工程”中選擇“部件”,在列表中選擇“Microsoft FlexGrid Control…”,單擊“確定”按鈕便可將MSFlexGrid控件加入工具箱中。
在MIS系統的開發中,由于MSFlexGrid控件使用的頻繁性,所以在VB6.0的模塊中,需要定義其公共的聲明和方法部分,以方便控件的使用,其步驟及關鍵代碼如下。
2.2.1 聲明MSGItem類型
MSGItem類型中包含欲在MSFlexGrid控件中顯示的一個字段的關鍵信息,包含數據表
結構中的strFieldName及對應的中文表頭(strFieldCNCaption)和顯示時的列寬(lngColWidth)。
Public Type MSGItem
strFieldName As String
strFieldCNCaption As String
lngColWidth As Long
End Type
2.2.2 初始化MSGItem類型
將MSFlexGrid控件同時顯示多個字段信息存入MSGItem類型的數組refmsgItems()中,
其關鍵部分代碼如下:
Public Sub ginitmsgItems(ByVal strFrmName As String, ByRef refmsgItems() As MSGItem)
………’變量聲明部分
ReDim refmsgItems(0)
strSQL = \"select * from Tab_FieldIndex where strFrmName = ‘\" Trim$( strFrmName) \"’ order by lngFieldName\"
Set rs1 = New ADODB.Recordset
rs1.Open strSQL, gcnMain, adOpenForwardOnly, adLockReadOnly‘gcnMain為數據庫連接字符串
With rs1
Do While .EOF = False
ReDim Preserve refmsgItems(UBound(refmsgItems) + 1)
refmsgItems(UBound(refmsgItems)).strFieldName = Trim$(rs1!strFieldName)
refmsgItems(UBound(refmsgItems)).strFieldCNCaption = Trim$(rs1!strFieldCNCaption)
refmsgItems(UBound(refmsgItems)).lngColWidth = rs1!lngColWidth
.MoveNext
Loop
.Close
End With
Set rs1 = Nothing
End Sub
2.2.3 初始化控件表頭
將存入refmsgItems()中的字段信息作為MSFlexGrid控件的表頭標題顯示出來。
ginitmsgHeader()中以聲明的MSGItem類型對象和MSGFlexGrid控件名為參數,其關鍵部分代碼如下:
Public Sub ginitmsgHeader(ByRef refmsgItems() As MSGItem, ByRef refMsg As MSFlexGrid)
Dim i as Long
With refMsg
…….’指定MSGFlexGrid控件的行信息
.Cols = UBound(refmsgItems) + 1
For i = 0 To UBound(refmsgItems)
.Col = i
Select Case i
Case 0.ColWidth(i) = 300
Case Else.CellAlignment = 4
.ColWidth(i) = refmsgItems(i).lngColWidth
.Text = refmsgItems(i).strFieldCNCaption
End Select
Next i
End With
End Sub
2.3 MSFlexGrid控件的使用步驟
有了以上的準備工作,MSFlexGrid控件的使用就變得十分簡單方便。以下以一例來說明其具體使用步驟。
(1)在窗體frm_test上添加一MSFlexGrid控件,并命名為msg1;
(2)聲明類型:Private mmsgItems() As MSGItem;
(3)在窗體的Form_Load()事件中添加以下代碼顯示MSFlexGrid控件的頭。
ReDim mmsgItems(0)
將欲在frm_test窗體上的msg1控件中顯示的字段信息存入定義好的mmsgItems類型數組中:
ginitmsgItems \"frm_test\", mmsgItems()
將存入mmsgItems類型數組中的字段信息作為MSFlexGrid控件的表頭信息顯示出來。
ginitmsgHeader mmsgItems(), msg1
(4)顯示表格內容。
首先聲明Recordset對象rs1,接著書寫實現程序功能的SQL語句并建立與數據庫的連接,在讀取Recordset的同時,通過比較mmsgItems數組中的字段名便可將從數據庫中讀取的相應字段內容信息顯示在MSFlexGrid控件中。下面給出了常見字符型、數字型及布爾變量顯示方法的關鍵代碼:
With rs1
Do while .EOF = 1
…….’指定MSGFlexGrid控件的行信息
For i = 1 To UBound(mmsgItems)
msg1.Col = i
Select Case UCase$(mmsgItems(i).strFieldName)
Case UCase$(\" strField1\"), UCase$(\" strField 2\") ‘顯示字符字段
msg1.CellAlignment = 1‘可添加或更換其它屬性
msg1.Text = Trim$(.Fields(mmsgItems(i).strFieldName).Value)
Case UCase$(\" decField 1\")‘格式化數字類型字段
msg1.Text = Format$(.Fields(mmsgItems(i).strFieldName).Value, \"0.00\")
Case UCase$(\"blnField1\")‘顯示布爾變量(下轉第208頁)
(上接第201頁)
If rs1!blnField1 = True Then msg1.Text = \"True\"
Elsemsg1.Text = \"\"
End If
End Select
Next i
.MoveNext
Loop
.Close
End With
(5)數據維護
由于MSFlexGrid控件是只讀的,不允許用戶直接編輯被綁定或包含在控件中的數據,所以,在開發MIS系統時將其與TextBox、ListBox、ComboBox等控件相結合,便可以方便的實現將SFlexGrid控件中的數據顯示到其它控件中,也可將其它控件中的編輯好的內容添加或修改到數據庫中,并在MSFlexGrid控件中顯示其內容。
(6)報表打印輸出
在MIS系統開發過程中,離不開報表的打印輸出。由于MSFlexGrid控件對單元格操作的特性與Excel類似,所以可利用Excel的后臺打印功能來實現[4]。為此,在VB工程的公共模塊中,我們編寫了集打印輸出功能于一體的方法:gPrintmsg()。該方法以valSaveFileName(欲保存的文件名)、valMsg(MSFlexGrid控件名)、valExcelSheetName(后臺建立好的Excel工作表名)和valblnExport(控制是打印或輸出的布爾變量)為參數。在使用是,首先,在創建Excel的工作表時設定好打印的固定內容部分并命名,然后只需調用gPrintmsg()方法并賦以正確的參數信息就行,使用十分方便。
3 總結
MSFlexGrid控件由于其使用的靈活性,在開發MIS系統時得以頻繁使用。文中詳細介紹了MSFlexGrid控件使用時的添加控件、建立后臺數據表、編寫公共模塊、數據的顯示與維護以及報表的打印輸出幾個環節,并給出了關鍵部分的代碼。
參考文獻:
[1] 明日科技.Visual Basic數據庫開發關鍵技術與實例應用[M].北京:人民郵電出版社,2004.
[2] 劉少華.利用MSFlexGrid控件編制通用報表打印程序[J].湘潭師范學院學報(自然科學版),2005,27(2):96-98.
[3] 韋建忠.Visual Basic在Excel中的應用綜述[J].科技創新導報,2007(33):120-121
[4] 胡巖,羅志宏.VB中MSFlexGrid控件的擴展應用[J].電腦學習,2006(5):32-33.
注:本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文