1、浅谈 VB 编程中网格控件的选用及使用方法随着基于构件开发(Component-Based Development)技术的发展,供开发者使用的软件构件越来越多,单就 VB 中可使用的网格类控件也有许多种。网格类控件常用在数据库管理系统的开发中,用来直观地显示表或视图的二维关系,在对数据的操作上,有些控件也提供了很多便捷的方法。 同样是完成这些显示和操作数据的功能,面对各式各样的控件,选择那种来达到目的,成了软件开发者必须考虑的新问题。唯有选择了一个好的控件,才能提高开发效率,增强软件的功能,达到事半功倍的效果。 下面,本人根据自己长期以来积累的实际经验,总结出以下几点网格控件的选用应考虑的方面
2、摘要:第一,要考虑控件的实际功能。功能强、接口多的控件可以增强应用软件的质量,也可减少编程工作量,当然,这要结合应用需求来定,并不是功能越多越好。提供的功能多了,控件本身就很大,占好几兆空间,增加了程序的冗余代码。另外,一些功能闲置,灵活性太强也可能导致最终用户不易把握使用。第二,控件的稳定性要强。作为应用程序的基石,不应选用那些控件本身轻易出错,补丁(patch)太多的版本。第三,控件的易用性要高。选用那些属性配置合理,事件触发机制明晰流畅,易于设计和使用,项目组中的程序员都轻易接受把握的控件。 以下简要介绍几种网格类控件的特征,以供选用。 Grid 控件摘要: Grid 控件可显示简单的二
3、维表格,不用和数据库直接连接,具有滚动条、行头、列头等特性,运行时可用鼠标调整行列的宽度,可用于浏览数据,若想对数据进行编辑,需结合 TextBox 控件,或采取其他变通方法。下面所示画面即为日本东京社会调查探究所开发的要员管理系统中硬件管理部分的画面。 画面中的下部即为 Grid 控件,定义其名称为GrdHardComp。使用时,要首先在下图所示的属性窗口中定义其行列数,控制条格式,字体大小,填充格式,鼠标模式等特性。 然后,可以动态的划分其间距摘要: GrdHardComp.ColWidth(0) = GrdHardComp.Width * 1 / 6 GrdHardComp.ColWid
4、th(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 Priv
5、ate 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
6、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%)/
7、 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.Te
8、xt = “ “ %26 Hards(H%).OrderNum GrdHardComp.Col = 1 GrdHardComp.Text = “ “ %26 Hards(H%).MachKind GrdHardComp.Col = 2 GrdHardComp.Text = “ “ %26 Hards(H%).MachKindName GrdHardComp.Col = 3 GrdHardComp.Text = “ “ %26 Hards(H%).MachName GrdHardComp.Col = 4 GrdHardComp.Text = “ “ %26 Hards(H%).HardLastD
9、ate GrdHardComp.Rows = GrdHardComp.Rows + 1/行数加 1 HardComp.MoveNext H% = H% + 1 当然,假如使数据真正写入数据库,还需进行数据库的读写操作。Grid 只是提供了一个预览的功能,便于数据的修改。 由以上 Grid 的特征及其使用方法可以看出,在需要对数据库进行大量数据的操作时,为了减少对数据库的直接操作,提高数据库的平安性,使用 Grid 控件,还是有很大方便的。 Grid 是 VB 在早期版本中就带有的控件,使用简便,稳定性好,在早期的 VB 开发过程中,使用尤其广泛。但现在和其它控件比较起来功能有些不足。 DBGr
10、id 控件摘要:DBGrid 是专用来操作数据库的网格控件,可以绑定到 Data 控件,几乎不用写代码就可方便地对数据进行显示,增加、删除或修改记录,DBGrid 具有 OnAddNew、BeforeDelete 等事件,可在增加新记录或删除修改时对数据进行有效性检验,来实现事务处理功能。DBGrid 也可以在设计时编辑网格格式,指定显示字段等,由于它提供了Column、Split、SelBookmarks 等对象,更增强了显示和操作数据的能力。下面是笔者所参和开发的东京社会调查探究所的项目-健康诊断系统的一个实例。 图中的 Data4 控件把数据库和 DBGrid 直接连起来,DBGrid
11、的题目,项目设置可以在属性窗口里直接做到。在使用时,要注重新数据是先更新数据库,然后才回写到 DBGrid 里。方法如下摘要: Sql = “SELECT * FROM 表名“ /SQL 语句 Set Data4.Recordset = MyDB2.OpenRecordset(sSql, dbOpenSnapshot) Data4.Refresh 或摘要: DatMonthPlan.RecordSource = “SELECT * FROM 表名 WHERE (关键字)=“ %26 Key %26 “); 假如想对 DBGrid中的某个条目进行复制,方法如下摘要: Data4.Recordse
12、t.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/数据
13、库更新 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 = “%26 实际数据域 %26“ DBGrid1.Columns(i).Visible = True /可见性 DBGrid1.Columns(i).Ali
14、gnment = 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 同出一宗,所以两者有很多相同点。在基本功能上,
15、DBGrid 的增,减等操作方法可直接用于 True DBGrid,在这里就不再赘述。但在DBGrid 的基础上,True DBGrid 可以直接嵌入 ListBox、Image 位图、单选框等控件(如图所示) ,使软件的界面更加美观,实用。 SSDBGrid 控件摘要: SSDBGrid 来自 Sheridan 软件系统公司(http 摘要:/),和 Sheridan 的其它控件一样,以漂亮的三维界面见长,SSDBGrid 还可和其它数据库控件如 SSDBData、SSDBCombo 等有机结合,为用户处理数据提供方便,它有几百个属性、方法等接口,为界面的润色提供了很大的选择余地。另外 SS
16、DBGrid 还具有虚拟数据管理(virtual data management)技术,在内存中只存贮需显示在界面上的记录,这样在处理大量数据时不致耗费系统资源而影响运行速度。SSDBGrid 的缺点只是在有些版本中输入汉字时会出现一些乱码,但显示汉字的效果很不错。 MSFlexGrid 控件摘要: MSFlexGrid 和vsFlexArray 在显示数据方面有很多独到之处,在运行中可通过拖放来交换各列的位置,动态地对数据进行排序、分组合并等。vsFlexArray 控件是 VideoSoft 公司的产品,MSFlexGrid 的部分技术也来自此公司。 vaSpread 控件摘要: vaSp
17、read 控件在处理数据方面有着更大的灵活性,它支持数据绑定,虚拟数据管理等技术,而且具备了电子表格的功能,编辑中可以使用剪贴板来剪切或复制单元格区域的数据,单元格中也可以加入公式,借助Spread 的计算引擎(Spreads Calc Engine)对数据进行分析计算。Spread Designer 还可方便地设计表格的格式,在单元格中加入按钮、图片、组合框等,自己设计的表格格式还能作为模板和数据分开来保存。若想得到简单的报表,vaSpread 的打印功能可直接把界面和数据打印出来,而不需通过专门的报表打印控件。vaSpread 是FarPointTechnologies 公司的产品,网址为
18、 http 摘要:/。 Formula One 控件摘要: Formula One 有更强的数据处理功能,是和 Excel 兼容的电子表格控件,在 PowerBuilder 中经常用到,它来自 Sybase 下属的 Visual components 公司,网址 http 摘要:/。l 另外,PowerBuilder 中,常用子窗口-Database Windows 的形式来显示数据库的构成。如下图,至于其使用方法,这里就不再赘述了。参考文献摘要:1. 微软公司VB 部件工具 ,1997 年版2. True DBGrid 4.0d “Hondo“ (Build 4.0.0130, dated 10/16/96).3. PowerBuilder6.0 应用和开发 ,清华大学出版社