内容提要: The software of visual basic developed by Microsoft corporation is becoming one of 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。 微软公司的面对对象的程序开发软件VB(Visual Basic)日益成为当前所流行的主流开发工具。作为其显著的特色之一,VB所提供的网格类控件,在实际的数据库管理系统的开发过程中具有很大的实用性和灵活性。本文旨在讨论在使用VB的实际开发过程中,如何有选择的使用VB所提供的网格类控件以及如何方便、简洁的去使用。
关键词汇: Component-Based Development Virtual Data Management Spread's Calc Engine 构件开发 虚拟数据管理 计算引擎
随着基于构件开发(Component-Based Development)技术的发展,供开发者使用的软件构件越来越多,单就VB中可使用的网格类控件也有许多种。网格类控件常用在数据库管理系统的开发中,用来直观地显示表或视图的二维关系,在对数据的操作上,有些控件也提供了很多便捷的方法。 同样是完成这些显示和操作数据的功能,面对各式各样的控件,选择那种来达到目的,成了软件开发者必须考虑的问题。唯有选择了一个好的控件,才能提高开发效率,增强软件的功能,达到事半功倍的效果。 下面,本人根据自己长期以来积累的实际经验,总结出以下几点网格控件的选用应考虑的方面:
第一,要考虑控件的实际功能。功能强、接口多的控件可以增强应用软件的质量,也可减少编程工作量,当然,这要结合应用需求来定,并不是功能越多越好。提供的功能多了,控件本身就很大,占好几兆空间,增加了程序的冗余代码。另外,一些功能闲置,灵活性太强也可能导致最终用户不易掌握使用。
第二,控件的稳定性要强。作为应用程序的基石,不应选用那些控件本身容易出错,补丁(patch)太多的版本。
第三,控件的易用性要高。选用那些属性配置合理,事件触发机制明晰流畅,易于设计和使用,项目组中的程序员都容易接受掌握的控件。 以下简要介绍几种网格类控件的特点,以供选用。 Grid控件: Grid控件可显示简单的二维表格,不用和数据库直接连接,具有滚动条、行头、列头等特性,运行时可用鼠标调整行列的宽度,可用于浏览数据,若想对数据进行编辑,需结合TextBox控件,或采取其他变通方法。下面所示画面即为日本东京社会调查研究所开发的《要员管理系统》中硬件管理部分的画面。 画面中的下部即为Grid控件,定义其名称为GrdHardComp。使用时,要首先在下图所示的属性窗口中定义其行列数,控制条格式,字体大小,填充格式,鼠标模式等特性。 然后,可以动态的划分其间距: 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 定义其标题: GrdHardComp.Row = 0 ' GrdHardComp.Col = 0 GrdHardComp.FixedAlignment(GrdHardComp.Col) = 2 GrdHardComp.Text = "构成番号" GrdHardComp.Col = 1 GrdHardComp.FixedAlignment(GrdHardComp.Col) = 2 GrdHardComp.Text = "构成机器区分"① … … 在数据向Grid中写入或取出时,为了便于大量的数据同时,简便地写入与修改,可以定义一个类型。如下: Type M_Hard Number As String OrderNum As String MachKind As String MachKindName As String … … End Type (其中Number等均为要输入的图示条目) Private Hards() As M_Hard Hards(),此时就作为数据的传输变量,进行Grid与TextBox之间的数据传输。 数据向类内写入: If HardComp.RecordCount > 0 Then HardComp.MoveFirst Do Until HardComp.EOF ReDim Preserve Hards(H%)// H%为记数变量。 Hards(H%).OrderNum = HardComp![ OrderNum]//输入编号 Hards(H%).MachKind = HardComp![ MachKind]//种类 Hards(H%).MachKindName = HardComp![ MachKindName]//分类名 Hards(H%).MachName = HardComp![ MachName]//名称 … … loop HardComp.MoveFirst 类内数据向Grid内写入: GrdHardComp.Row = H% + 1//记录数统计 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//行数加1 HardComp.MoveNext H% = H% + 1 当然,如果使数据真正写入数据库,还需进行数据库的读写操作。Grid只是提供了一个预览的功能,便于数据的修改。 由以上Grid的特点及其使用方法可以看出,在需要对数据库进行大量数据的操作时,为了减少对数据库的直接操作,提高数据库的安全性,使用Grid控件,还是有很大方便的。 Grid是VB在早期版本中就带有的控件,使用简便,稳定性好,在早期的VB开发过程中,使用尤其广泛。但现在与其它控件比较起来功能有些不足。 DBGrid控件: DBGrid是专用来操作数据库的网格控件,可以绑定到Data控件,几乎不用写代码就可方便地对数据进行显示,增加、删除或修改记录,DBGrid具有OnAddNew、BeforeDelete等事件,可在增加新记录或删除修改时对数据进行有效性检验,来实现事务处理功能。DBGrid也可以在设计时编辑网格格式,指定显示字段等,由于它提供了Column、Split、SelBookmarks等对象,更增强了显示和操作数据的能力。 下面是笔者所参与开发的东京社会调查研究所的项目--《健康诊断系统》的一个实例。 图中的Data4控件把数据库和DBGrid直接连起来,DBGrid的题目,项目设置可以在属性窗口里直接做到。在使用时,要注意新数据是先更新数据库,然后才回写到DBGrid里。方法如下: Sql = "SELECT * FROM 表名" //SQL语句 Set Data4.Recordset = MyDB2.OpenRecordset(sSql, dbOpenSnapshot) Data4.Refresh 或: DatMonthPlan.RecordSource = "SELECT * FROM 表名WHERE (((关键字)='" & Key & "')); 如果想对DBGrid中的某个条目进行复制,方法如下: Data4.Recordset.AddNew Data4.Recordset![ 关键字] = Key//关键字索引 Data4.Recordset![记号]= DBGrid.Columns(0).CellValue(DBGrid.GetBookmark(0))//第一列 Data4.Recordset[番号]=DBGrid.Columns(1).CellValue(DBGrid.GetBookmark(0))// 第二列 Data4.Recordset![氏名]=DBGrid.Columns(2).CellValue(DBGrid.GetBookmark(0))//第三列 Data4.Recordset.Update Data4.Refresh//数据库更新 DBGrid.Refresh// DBGrid刷新 如果动态的对DBGrid中的某个栏目进行增减,可以用如下方法: i = 1 //总显示列数记数 Data4.MoveFirst Do Until Data4.EOF DBGrid1.Columns(i).Width = 1600 //定义宽度 DBGrid1.Columns(i).Caption = "年龄" //标题 DBGrid1.Columns(i).DataField = "& 实际数据域 &" DBGrid1.Columns(i).Visible = True //可见性 DBGrid1.Columns(i).Alignment = 1 //DBGrid 控件列中的值的对齐方式 Data4.MoveNext i = i + 1 If i > 8 Then Exit Do//列数最大为8 Loop 由于具有良好的可靠性,灵活性和直观性,所以DBGrid控件现在被广泛使用。但不足之处在于DBGrid,和直接操作数据库,对数据库的正确性有一定的威胁。改进方法是,在修改数据库时,加入提示信息。 True DBGrid: DBGrid是Apex软件公司为微软开发的,而Apex的True DBGrid控件也具有较强的数据显示及处理功能,因与DBGrid同出一宗,所以两者有很多相同点。在基本功能上,DBGrid的增,减等操作方法可直接用于True DBGrid,在这里就不再赘述。但在DBGrid的基础上,True DBGrid可以直接嵌入ListBox、Image位图、单选框等控件(如图所示),使软件的界面更加美观,实用。 SSDBGrid控件: SSDBGrid来自Sheridan软件系统公司http://www.shersoft.com),与Sheridan的其它控件一样,以漂亮的三维界面见长,SSDBGrid还可与其它数据库控件如SSDBData、SSDBCombo等有机结合,为用户处理数据提供方便,它有几百个属性、方法等接口,为界面的润色提供了很大的选择余地。另外SSDBGrid还具有虚拟数据管理(virtual data management)技术,在内存中只存贮需显示在界面上的记录,这样在处理大量数据时不致耗费系统资源而影响运行速度。SSDBGrid的缺点只是在有些版本中输入汉字时会出现一些乱码,但显示汉字的效果很不错。 MSFlexGrid控件: MSFlexGrid和vsFlexArray在显示数据方面有很多独到之处,在运行中可通过拖放来交换各列的位置,动态地对数据进行排序、分组合并等。vsFlexArray控件是VideoSoft公司(www.videosoft.com)的产品,MSFlexGrid的部分技术也来自此公司。 vaSpread控件: vaSpread控件在处理数据方面有着更大的灵活性,它支持数据绑定,虚拟数据管理等技术,而且具备了电子表格的功能,编辑中可以使用剪贴板来剪切或复制单元格区域的数据,单元格中也可以加入公式,借助Spread的计算引擎(Spread's Calc Engine)对数据进行分析计算。Spread Designer还可方便地设计表格的格式,在单元格中加入按钮、图片、组合框等,自己设计的表格格式还能作为模板与数据分开来保存。若想得到简单的报表,vaSpread的打印功能可直接把界面和数据打印出来,而不需通过专门的报表打印控件。vaSpread是FarPointTechnologies公司的产品,网址为 http://www.fpoint.com。 Formula One控件: Formula One有更强的数据处理功能,是与Excel兼容的电子表格控件,在PowerBuilder中经常用到,它来自Sybase下属的Visual components公司,网http://www.visualcomp.com。l另外,PowerBuilder中,常用子窗口--Database Windows 的形式来显示数据库的构成。如下图,至于其使用方法,这里就不再赘述了。 参考文献: 1. 微软公司《VB部件工具》,1997年版 2. True DBGrid 4.0d "Hondo" (Build 4.0.0130, dated 10/16/96). 3. 《PowerBuilder6.0应用与开发》,清华大学出版社