一.表格控件总览:
在VB开发环境中,表格控件在界面开发元素中占有重要的地位。它不仅有外观整洁、表达形式规范的优点,而且更重要的是它较高的信息表现率(就是相对于其他控件来说能够表达更多的信息),随着信息时代的到来,它的应用将更加的广泛。
那么在VB平台下,如何操作这一功能强大的控件元素呢?事实上我们知道,VB平台下面的表格控件是相当丰富的,总结下来提供了4种类型:Microsoft Data Bound grid Control、Microsoft Datagrid Control、Microsoft Flexgrid Control、Microsoft Hierarchial Flexgrid Control.
这四种表格各有其特点,下面我们一一讨论。
1. Microsoft Data Bound grid Control
此控件主要用于
数据绑定(可以不绑定,但是因为不提供对单个cell的控制支持,所以实际上这样做是不经济的)。具体说来,就是
数据源比较固定的情况下可以使用这种控件。
具体使用方法是设定此控件的datasource属性,就可以不用编写任何代码就可以显示该
数据源所指向的记录
数据。比如可以将datasource设置为一个data控件,而data控件又指向
数据库"成绩"的 一个"语文"表,那么当程序运行时,它就
自动显示此"语文"表的
数据。
从上面的分析看得出来,这个控件虽然操作方便,但是它也有局限性,就是不能对显示的
数据进行灵活的控制操作,比如有些
数据允许用户修改,有些
数据却不允许用户修改,而此控件却只能提供全部
数据源的原子操作:即要么全部允许修改,要么就全部不允许。还有另外此控件也不提供对单个单元格(cell)进行操作,所以提供不了更为个性化的界面风格。
2. Microsoft Datagrid Control
此控件跟前面介绍的Data Bound grid Control控件很相似,也是主要进行绑定操作,而缺点和Data Bound grid Control完全一样。但是它跟Data Bound grid Control不一样的是其
数据源的驱动引擎只能是OLEDB形式的,不能是DAO,比如就可以使用ADO
数据控件,不能使用DATA控件。而Data Bound grid Control却刚好和它相反,这一点在开发中一定要注意。
3. Microsoft Flexgrid Control与Microsoft Hierarchial Flexgrid Control.
这里重点介绍这两种控件,因为在实际开发中,这两种控件应用的场合更多一些,它不仅能够反映
数据,而且也能把
数据的修改信息反映到
数据库中去,所以弥补了上述两种控件的不足。
如果
数据不需要修改,那么可以进行绑定操作,其方法跟前面介绍的完全一样,就是通过设置DataSource属性来完成
数据的显示工作。但是实际开发中,需要对整个表格控件更为灵活的显示控制。
在给出例程之前,有必要对这一控件进行比较详尽的认识:这种控件允许将文本或者图象放置于每个单元格之中,控件的Row与Col属性允许用户在代码中指定当前行和列,当然也可通过操作鼠标和键盘来改变这两个属性,而text属性指明当前单元格的文本。如果单元格的文本太长而不能完全显示出来的话,可以通过将WordWrap属性设置为true来达到显示的目的。下面将比较重要的属性小结如下:
DataSource---------用来指定需要绑定的
数据源,比如data控件。
Cellpicture----------用来设定当前单元格的图象,便于显示该图象。此属性不能在设计时使用。
Col,Row---------------设定当前列和当前行,注意它们均是从0开始的,如果同时设定它们,可以指定当前的单元格。设计时也不能使用。
Cols,Rows---------------设置表格控件总的列数和行数。
Hwnd---------------表格句柄,可以结合Windows API对表格控件进行更高级的控制。
Text---------------指定当前的单元格的文本内容。
TextMatrix(i,j)-------此属性比较重要,它用来指定第I行和第j列所确定的单元格的文本内容。它等价于下面的代码:
MSHFlexGrid1.Rows =i
MSHFlexGrid1.Cols =j
MSHFlexGrid1.Text =指定的字符串
WordWrap-------为ture时可以在当前单元格换行显示,否则如果要显示的字符的长度超过列宽,那么就不能显示完全。
二.例程分析:
以上只是介绍了表格控件经常使用的属性,还有很多其他重要的属性这里限于篇幅就不一样讲解了,如果读者有兴趣的话可以参考MSDN上相关的内容的介绍,下面我这里提供一个例程来巩固前面的知识内容。
例程是使用Flexgrid 控件(由于Data Bound grid和Datagrid比较简单,所以这里就不再介绍了),如果大家手头上用的是MSHFlexgrid控件的话,只需要把名称换为MSFlexGrid1即可。该例程主要实现后台
数据库的显示工作。
主要代码如下:
Dim lastrow% '最后一次鼠标点击的行
Dim lastcol% '最后一次鼠标点击的列
Private Sub Command1_Click()
MsgBox Data1.Database.Recordsets.Count
End Sub
Private Sub Form_Load()
'初始化数据
click = False
lastrow = 1
lastcol = 1
'初始化data控件,进行绑定显示的初始化
Data1.DatabaseName = App.Path & "\db1.mdb"
Data1.RecordSource = "成绩表"
'进行非绑定显示
Data1.Refresh
Data1.Recordset.MoveFirst
MSFlexGrid2.Rows = Data1.Database.Recordsets.Count + 1 '设置总行数
MSFlexGrid2.Cols = Data1.Recordset.Fields.Count + 1 '设置总列数
MSFlexGrid2.GridColor = vbBlue '网格颜色
MSFlexGrid2.ForeColor = vbRed '字体颜色
MSFlexGrid2.GridLines = 1 '设置网格线的属性
MSFlexGrid2.GridLineWidth = 2 '设置网格线的粗细程序,默认为1
MSFlexGrid2.ToolTipText = "非绑定显示" '设置工具提示文本
MSFlexGrid2.BackColorSel = vbGreen '单元格被选中的颜色
Dim i%
Dim j%
'设置列头文本
For i = 1 To MSFlexGrid2.Cols - 1
MSFlexGrid2.TextMatrix(0, i) = Data1.Recordset.Fields(i - 1).Name
Next i
'设置数据
For i = 1 To MSFlexGrid2.Rows - 1 '控制行
For j = 1 To MSFlexGrid2.Cols - 1 '控制列
MSFlexGrid2.TextMatrix(i, j) = Data1.Recordset.Fields(j - 1).Value
Next j
Data1.Recordset.MoveNext
Next i
'设置当前单元格的图象信息
MSFlexGrid2.Col = 0
MSFlexGrid2.Row = 2
Set MSFlexGrid2.CellPicture = LoadPicture(App.Path & "\cell.bmp")
End Sub
'实现鼠标点击一个单元格的背景颜色的改变功能
Private Sub MSFlexGrid2_Click()
MSFlexGrid2.Row = lastrow
MSFlexGrid2.Col = lastcol
MSFlexGrid2.CellBackColor = vbWhite
MSFlexGrid2.Row = MSFlexGrid2.MouseRow
MSFlexGrid2.Col = MSFlexGrid2.MouseCol
MSFlexGrid2.CellBackColor = vbCyan
lastrow = MSFlexGrid2.Row
lastcol = MSFlexGrid2.Col
End Sub
|
要在不绑定
数据的情况下实现编辑修改的功能,如果对控件不进行改进是无法达到目的的。这里实现的思路是首先判断光标(或者说焦点)在哪个单元格上,然后在在单元格的范围内动态创建一个文本框(不过在vb平台下,可以考虑先在设计时放置一个不可见的文本框,然后通过move方法将其放置到当前单元格并且显示它即可达到相同的目的),其大小正好可以把此单元格给覆盖掉,然后就可以把原来的文本信息附给该文本框,这样就可以直接在文本框内进行编辑修改操作,从而实现了单元格的编辑修改功能,依据这个思想来可以在单元格里面创建下拉列表框,复选框等控件。其实现的核心代码如下:
'实现编辑功能
Private Sub MSFlexGrid3_DblClick()
Text1.Visible = False
'如果初次双击,那么就执行如下代码
If firstclick = True Then
lastclickrow = MSFlexGrid3.Row
lastclickcol = MSFlexGrid3.Col
Text1.Text = MSFlexGrid3.TextMatrix(lastclickrow, lastclickcol)
End If
'将文本框放置到当前单元格处
Dim LeftOfText% '文本框的left属性
Dim TopOfText% '文本框的top属性
Dim selrow% '当前行
Dim selcol% '当前列
selrow = MSFlexGrid3.Row
selcol = MSFlexGrid3.Col
LeftOfText = Frame3.Left + MSFlexGrid3.Left + MSFlexGrid3.ColPos(selcol) + 45
TopOfText = Frame3.Top + MSFlexGrid3.Top + MSFlexGrid3.RowPos(selrow) + 45
Text1.Move LeftOfText, TopOfText, 930, 200
Text1.Visible = True
'如果不是初次双击,那么就执行如下代码
If firstclick = False Then
MSFlexGrid3.TextMatrix(lastclickrow, lastclickcol) = Text1.Text
lastclickrow = MSFlexGrid3.Row
lastclickcol = MSFlexGrid3.Col
End If
Text1.Text = MSFlexGrid3.TextMatrix(selrow, selcol)
'已经不是第一次进行双击操作
firstclick = False
End Sub |
三.小结:
数据表格控件在实际运用用还有很多技巧,只有不断的在实际
编程中积累经验才能达到灵活运用的功效。