- 相關(guān)推薦
VB編程中網(wǎng)格控件的選用及使用方法
內(nèi)容提要: The software of visual basic developed by Microsoft corporation is becoming oneof the main develop tools at today。 As it's remarkable peculiarity, the Grid control has
very great practical and active use。 This topic discusses how to use the grid control of
VB to develop pratical software and how to use it conveniently and simply。 微軟公司的面對(duì)對(duì)象的程序開(kāi)發(fā)軟件VB(Visual Basic)日益成為當(dāng)前所流行的主流開(kāi)發(fā)工具。作為其顯著的特色之一,VB所提供的網(wǎng)格類控件,在實(shí)際的數(shù)據(jù)庫(kù)管理系統(tǒng)的開(kāi)發(fā)過(guò)程中具有很大的實(shí)用性和靈活性。本文旨在討論在使用VB的實(shí)際開(kāi)發(fā)過(guò)程中,如何有選擇的使用VB所提供的網(wǎng)格類控件以及如何方便、簡(jiǎn)潔的去使用。
關(guān)鍵詞匯: Component-Based Development Virtual Data Management Spread's Calc Engine 構(gòu)件開(kāi)發(fā) 虛擬數(shù)據(jù)管理 計(jì)算引擎
隨著基于構(gòu)件開(kāi)發(fā)(Component-Based Development)技術(shù)的發(fā)展,供開(kāi)發(fā)者使用的軟件構(gòu)件越來(lái)越多,單就VB中可使用的網(wǎng)格類控件也有許多種。網(wǎng)格類控件常用在數(shù)據(jù)庫(kù)管理系統(tǒng)的開(kāi)發(fā)中,用來(lái)直觀地顯示表或視圖的二維關(guān)系,在對(duì)數(shù)據(jù)的操作上,有些控件也提供了很多便捷的方法。 同樣是完成這些顯示和操作數(shù)據(jù)的功能,面對(duì)各式各樣的控件,選擇那種來(lái)達(dá)到目的,成了軟件開(kāi)發(fā)者必須考慮的問(wèn)題。唯有選擇了一個(gè)好的控件,才能提高開(kāi)發(fā)效率,增強(qiáng)軟件的功能,達(dá)到事半功倍的效果。 下面,本人根據(jù)自己長(zhǎng)期以來(lái)積累的實(shí)際經(jīng)驗(yàn),總結(jié)出以下幾點(diǎn)網(wǎng)格控件的選用應(yīng)考慮的方面:
第一,要考慮控件的實(shí)際功能。功能強(qiáng)、接口多的控件可以增強(qiáng)應(yīng)用軟件的質(zhì)量,也可減少編程工作量,當(dāng)然,這要結(jié)合應(yīng)用需求來(lái)定,并不是功能越多越好。提供的功能多了,控件本身就很大,占好幾兆空間,增加了程序的冗余代碼。另外,一些功能閑置,靈活性太強(qiáng)也可能導(dǎo)致最終用戶不易掌握使用。
第二,控件的穩(wěn)定性要強(qiáng)。作為應(yīng)用程序的基石,不應(yīng)選用那些控件本身容易出錯(cuò),補(bǔ)丁(patch)太多的版本。
第三,控件的易用性要高。選用那些屬性配置合理,事件觸發(fā)機(jī)制明晰流暢,易于設(shè)計(jì)和使用,項(xiàng)目組中的程序員都容易接受掌握的控件。 以下簡(jiǎn)要介紹幾種網(wǎng)格類控件的特點(diǎn),以供選用。 Grid控件: Grid控件可顯示簡(jiǎn)單的二維表格,不用和數(shù)據(jù)庫(kù)直接連接,具有滾動(dòng)條、行頭、列頭等特性,運(yùn)行時(shí)可用鼠標(biāo)調(diào)整行列的寬度,可用于瀏覽數(shù)據(jù),若想對(duì)數(shù)據(jù)進(jìn)行編輯,需結(jié)合TextBox控件,或采取其他變通方法。下面所示畫(huà)面即為日本東京社會(huì)調(diào)查研究所開(kāi)發(fā)的《要員管理系統(tǒng)》中硬件管理部分的畫(huà)面。 畫(huà)面中的下部即為Grid控件,定義其名稱為GrdHardComp。使用時(shí),要首先在下圖所示的屬性窗口中定義其行列數(shù),控制條格式,字體大小,填充格式,鼠標(biāo)模式等特性。 然后,可以動(dòng)態(tài)的劃分其間距: GrdHardComp.ColWidth(0) = GrdHardComp.Width * 1 / 6 GrdHardComp.ColWidth(1) = GrdHardComp.Width * 5 / 24 GrdHardComp.ColWidth(2) = GrdHardComp.Width * 1 / 6 GrdHardComp.ColWidth(3) = GrdHardComp.Width * 1 / 6 GrdHardComp.ColWidth(4) = GrdHardComp.Width * 3 / 24 GrdHardComp.ColWidth(5) = GrdHardComp.Width * 1 / 6 GrdHardComp.ColWidth(6) = GrdHardComp.Width * 1 / 6 Private Hards() As M_Hard 定義其標(biāo)題: GrdHardComp.Row = 0 ' GrdHardComp.Col = 0 GrdHardComp.FixedAlignment(GrdHardComp.Col) = 2 GrdHardComp.Text = "構(gòu)成番號(hào)" GrdHardComp.Col = 1 GrdHardComp.FixedAlignment(GrdHardComp.Col) = 2 GrdHardComp.Text = "構(gòu)成機(jī)器區(qū)分"① … … 在數(shù)據(jù)向Grid中寫(xiě)入或取出時(shí),為了便于大量的數(shù)據(jù)同時(shí),簡(jiǎn)便地寫(xiě)入與修改,可以定義一個(gè)類型。如下: Type M_Hard Number As String OrderNum As String
MachKind As String MachKindName
As String … … End Type (其中Number等均為要輸入的圖示條目) Private Hards() As M_Hard Hards(),此時(shí)就作為數(shù)據(jù)的傳輸變量,進(jìn)行Grid與TextBox之間的數(shù)據(jù)傳輸。 數(shù)據(jù)向類內(nèi)寫(xiě)入: If HardComp.RecordCount > 0 Then HardComp.MoveFirst Do Until HardComp.EOF
ReDim Preserve Hards(H%)// H%為記數(shù)變量。 Hards(H%).OrderNum = HardComp![ OrderNum]//輸入編號(hào) Hards(H%).MachKind = HardComp![ MachKind]//種類 Hards(H%).MachKindName = HardComp![ MachKindName]//分類名 Hards(H%).MachName = HardComp![ MachName]//名稱 … … loop HardComp.MoveFirst 類內(nèi)數(shù)據(jù)向Grid內(nèi)寫(xiě)入: GrdHardComp.Row = H% + 1//記錄數(shù)統(tǒng)計(jì) GrdHardComp.Col = 0 GrdHardComp.Text = " " & Hards(H%).OrderNum GrdHardComp.Col = 1 GrdHardComp.Text = " " & Hards(H%).MachKind GrdHardComp.Col = 2 GrdHardComp.Text = " " & Hards(H%).MachKindName GrdHardComp.Col = 3 GrdHardComp.Text = " " & Hards(H%).MachName GrdHardComp.Col = 4 … … GrdHardComp.Text = " " & Hards(H%).HardLastDate GrdHardComp.Rows = GrdHardComp.Rows + 1//行數(shù)加1 HardComp.MoveNext H% = H% + 1 當(dāng)然,如果使數(shù)據(jù)真正寫(xiě)入數(shù)據(jù)庫(kù),還需進(jìn)行數(shù)據(jù)庫(kù)的讀寫(xiě)操作。Grid只是提供了一個(gè)預(yù)覽的功能,便于數(shù)據(jù)的修改。 由以上Grid的特點(diǎn)及其使用方法可以看出,在需要對(duì)數(shù)據(jù)庫(kù)進(jìn)行大量數(shù)據(jù)的操作時(shí),為了減少對(duì)數(shù)據(jù)庫(kù)的直接操作,提高數(shù)據(jù)庫(kù)的安全性,使用Grid控件,還是有很大方便的。 Grid是VB在早期版本中就帶有的控件,使用簡(jiǎn)便,穩(wěn)定性好,在早期的VB開(kāi)發(fā)過(guò)程中,使用尤其廣泛。但現(xiàn)在與其它控件比較起來(lái)功能有些不足。 DBGrid控件: DBGrid是專用來(lái)操作數(shù)據(jù)庫(kù)的網(wǎng)格控件,可以綁定到Data控件,幾乎不用寫(xiě)代碼就可方便地對(duì)數(shù)據(jù)進(jìn)行顯示,增加、刪除或修改記錄,DBGrid具有OnAddNew、BeforeDelete等事件,可在增加新記錄或刪除修改時(shí)對(duì)數(shù)據(jù)進(jìn)行有效性檢驗(yàn),來(lái)實(shí)現(xiàn)事務(wù)處理功能。DBGrid也可以在設(shè)計(jì)時(shí)編輯網(wǎng)格格式,指定顯示字段等,由于它提供了Column、Split、SelBookmarks等對(duì)象,更增強(qiáng)了顯示和操作數(shù)據(jù)的能力。 下面是筆者所參與開(kāi)發(fā)的東京社會(huì)調(diào)查研究所的項(xiàng)目--《健康診斷系統(tǒng)》的一個(gè)實(shí)例。 圖中的Data4控件把數(shù)據(jù)庫(kù)和DBGrid直接連起來(lái),DBGrid的題目,項(xiàng)目設(shè)置可以在屬性窗口里直接做到。在使用時(shí),要注意新數(shù)據(jù)是先更新數(shù)據(jù)庫(kù),然后才回寫(xiě)到DBGrid里。方法如下: Sql = "SELECT * FROM 表名" //SQL語(yǔ)句 Set Data4.Recordset = MyDB2.OpenRecordset(sSql, dbOpenSnapshot) Data4.Refresh 或: DatMonthPlan.RecordSource = "SELECT * FROM 表名WHERE (((關(guān)鍵字)='" & Key & "')); 如果想對(duì)DBGrid中的某個(gè)條目進(jìn)行復(fù)制,方法如下: Data4.Recordset.AddNew Data4.Recordset![ 關(guān)鍵字] = Key//關(guān)鍵字索引 Data4.Recordset![記號(hào)]= DBGrid.Columns(0).CellValue(DBGrid.GetBookmark(0))//第一列 Data4.Recordset[番號(hào)]=DBGrid.Columns(1).CellValue(DBGrid.GetBookmark(0))// 第二列 Data4.Recordset![氏名]=DBGrid.Columns(2).CellValue(DBGrid.GetBookmark(0))//第三列 Data4.Recordset.Update Data4.Refresh//數(shù)據(jù)庫(kù)更新 DBGrid.Refresh// DBGrid刷新 如果動(dòng)態(tài)的對(duì)DBGrid中的某個(gè)欄目進(jìn)行增減,可以用如下方法: i = 1 //總顯示列數(shù)記數(shù) Dat
a4.MoveFirst Do Until Data4.EOF DBGrid1.Columns(i).Width = 1600 //定義寬度 DBGrid1.Columns(i).Caption = "年齡" //標(biāo)題 DBGrid1.Columns(i).DataField = "& 實(shí)際數(shù)據(jù)域 &" DBGrid1.Columns(i).Visible = True //可見(jiàn)性 DBGrid1.Columns(i).Alignment = 1 //DBGrid 控件列中的值的對(duì)齊方式 Data4.MoveNext i = i + 1 If i > 8 Then Exit Do//列數(shù)最大為8 Loop 由于具有良好的可靠性,靈活性和直觀性,所以DBGrid控件現(xiàn)在被廣泛使用。但不足之處在于DBGrid,和直接操作數(shù)據(jù)庫(kù),對(duì)數(shù)據(jù)庫(kù)的正確性有一定的威脅。改進(jìn)方法是,在修改數(shù)據(jù)庫(kù)時(shí),加入提示信息。 True DBGrid: DBGrid是Apex軟件公司為微軟開(kāi)發(fā)的,而Apex的True DBGrid控件也具有較強(qiáng)的數(shù)據(jù)顯示及處理功能,因與DBGrid同出一宗,所以兩者有很多相同點(diǎn)。在基本功能上,DBGrid的增,減等操作方法可直接用于True DBGrid,在這里就不再贅述。但在DBGrid的基礎(chǔ)上,True DBGrid可以直接嵌入ListBox、Image位圖、單選框等控件(如圖所示),使軟件的界面更加美觀,實(shí)用。 SSDBGrid控件: SSDBGrid來(lái)自Sheridan軟件系統(tǒng)公司http://www.shersoft.com),與Sheridan的其它控件一樣,以漂亮的三維界面見(jiàn)長(zhǎng),SSDBGrid還可與其它數(shù)據(jù)庫(kù)控件如SSDBData、SSDBCombo等有機(jī)結(jié)合,為用戶處理數(shù)據(jù)提供方便,它有幾百個(gè)屬性、方法等接口,為界面的潤(rùn)色提供了很大的選擇余地。另外SSDBGrid還具有虛擬數(shù)據(jù)管理(virtual data management)技術(shù),在內(nèi)存中只存貯需顯示在界面上的記錄,這樣在處理大量數(shù)據(jù)時(shí)不致耗費(fèi)系統(tǒng)資源而影響運(yùn)行速度。SSDBGrid的缺點(diǎn)只是在有些版本中輸入漢字時(shí)會(huì)出現(xiàn)一些亂碼,但顯示漢字的效果很不錯(cuò)。 MSFlexGrid控件: MSFlexGrid和vsFlexArray在顯示數(shù)據(jù)方面有很多獨(dú)到之處,在運(yùn)行中可通過(guò)拖放來(lái)交換各列的位置,動(dòng)態(tài)地對(duì)數(shù)據(jù)進(jìn)行排序、分組合并等。vsFlexArray控件是VideoSoft公司(www.videosoft.com)的產(chǎn)品,MSFlexGrid的部分技術(shù)也來(lái)自此公司。 vaSpread控件: vaSpread控件在處理數(shù)據(jù)方面有著更大的靈活性,它支持?jǐn)?shù)據(jù)綁定,虛擬數(shù)據(jù)管理等技術(shù),而且具備了電子表格的功能,編輯中可以使用剪貼板來(lái)剪切或復(fù)制單元格區(qū)域的數(shù)據(jù),單元格中也可以加入公式,借助Spread的計(jì)算引擎(Spread's Calc Engine)對(duì)數(shù)據(jù)進(jìn)行分析計(jì)算。Spread Designer還可方便地設(shè)計(jì)表格的格式,在單元格中加入按鈕、圖片、組合框等,自己設(shè)計(jì)的表格格式還能作為模板與數(shù)據(jù)分開(kāi)來(lái)保存。若想得到簡(jiǎn)單的報(bào)表,vaSpread的打印功能可直接把界面和數(shù)據(jù)打印出來(lái),而不需通過(guò)專門(mén)的報(bào)表打印控件。vaSpread是FarPointTechnologies公司的產(chǎn)品,網(wǎng)址為 http://www.fpoint.com。 Formula One控件: Formula One有更強(qiáng)的數(shù)據(jù)處理功能,是與Excel兼容的電子表格控件,在PowerBuilder中經(jīng)常用到,它來(lái)自Sybase下屬的Visual components公司,網(wǎng)http://www.visualcomp.com。l另外,PowerBuilder中,常用子窗口--Database Windows 的形式來(lái)顯示數(shù)據(jù)庫(kù)的構(gòu)成。如下圖,至于其使用方法,這里就不再贅述了。 參考文獻(xiàn): 1. 微軟公司《VB部件工具》,1997年版 2. True DBGrid 4.0d "Hondo" (Build 4.0.0130, dated 10/16/96). 3. 《PowerBuilder6.0應(yīng)用與開(kāi)發(fā)》,清華大學(xué)出版社
【VB編程中網(wǎng)格控件的選用及使用方法】相關(guān)文章:
在VB中如何使用 Winsock 控件08-06
VC 中靜態(tài)控件的特殊用法04-16
VB與MATLAB混合編程探討08-06
VC++中靜態(tài)控件的特殊用法08-06
利用VC中的通訊控件開(kāi)發(fā)串形通信程序08-06
用POWERPOINT課件提高《VB基礎(chǔ)編程》課的課堂效果08-13