思路:
1、在窗体上加入组合框,个数与需实现PickList功能的列数完全相同。
2、在相关事件中,如鼠标或光标(即焦点)定位在PickList列,则显示组合框,其位置、大小与DBGrid的所在单元完全重合,默认下,组合框的值为DBGrid的所在单元的值;否则组合框隐藏。
3、由用户在ComboBox组合框中选择或输入相关信息,并把组合框的信息放入DbGrid单元中即可。
实现过程:
为简单起见,假定需实现PickList的列只有一列,相应的数据库文件已加入相关控件中。
1、新建一工程,在引用中加入Microsoft Data Bound Control(即文件Dbgrid32.ocx);并把控件放入窗体中;设想记录文件包括姓名、退休种类等等,退休种类为第二列(为Dbgrid1的第一列),实现PickList功能;取DbGrid1.RowHeight=300,即与组合框的宽相等,且不允许调整Dbgrid1的行大小。
2、在窗体中加入ComboBox组合框,名称:Cbl退休种类;Visible:False(即隐藏);;在List属性加入信息:如离休|建国前老工人|退休|退职|伤退(注:|代表换行符)。
且把Cbl退休种类放在Dbgrid1上并置前;
实现PickList功能的主要源代码如下:
Option Explicit
Dim LastRecNum As Integer '记录组合框内容改变时记录的位置
Private Sub cbl退休种类显示_LostFocus()
'更新记录值
Dim CurRecNum '当前记录号
With Data1.Recordset
CurRecNum = .AbsolutePosition + 1
.MoveFirst
.Move LastRecNum - 1
.Edit
.Fields(1) = frmPick.cbl退休种类显示
.Update
'记录位置还原
.Move CurRecNum - LastRecNum
End With
End Sub
'关注以下三个事件
Private Sub DBGrid1_RowColChange(LastRow As Variant, ByVal LastCol As Integer)
DisPlayComboBox
End Sub
Private Sub DBGrid1_ColResize(ByVal ColIndex As Integer, Cancel As Integer)
DisPlayComboBox
End Sub
Private Sub DBGrid1_Scroll(Cancel As Integer)
Cancel = False
'组合框消失
DoEvents
frmPick.cbl退休种类显示.Visible = False
End Sub
Sub DisPlayComboBox()
‘符合条件时对组合框等应做的操作。为过程为文章的关键所在。