在VB中实现PickList功能

在VB中实现PickList功能


前言
使用Delphi编程的人都知道,在Delphi中数据库控件DbGrid具有PickList功能,即编辑所在列时,只要用鼠标点击时,该列所在行便会出现组合框,列出所有内容供用户选择,这很方便数据录入。如图一所示。


图一、Delphi的PickList功能展示图

很令人遗憾,VB所提供的控件Dbgrid32.ocx经作者寻找,无上述的PickList功能。
经作者探索,在VB中仍实现了上述的PickList功能。
思路:
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()
‘符合条件时对组合框等应做的操作。为过程为文章的关键所在。
'当前记录所在位置
LastRecNum = Data1.Recordset.AbsolutePosition + 1
'frmPick.Caption = Data1.Recordset.Fields(1).Value
With frmPick.cbl退休种类显示
'当光标或鼠标位于“退休种类”列时,
If DBGrid1.Col = 1 Then
'组合框出现且拥有焦点;
.Visible = True
.SetFocus
If DBGrid1.Columns(1) = "" Then
.Text = .List(0)
Else
.Text = DBGrid1.Columns(1)
End If
'cbl退休种类显示出现的位置
'左:
Dim RecordTitleWidth '记录头的宽度
RecordTitleWidth = 280 '该值不知怎获取,本处系逐步调整;
.Left = RecordTitleWidth + DBGrid1.Left + GetLeftColPos
Dim ColHeadHeight '列头的高度
ColHeadHeight = 220 '该值仍不知怎获取,本处系逐步调整;
.Top = DBGrid1.Top + DBGrid1.Row * DBGrid1.RowHeight + ColHeadHeight
.Width = DBGrid1.Columns(1).Width
End If
'当光标不在PickList 列时
If DBGrid1.Col <> 1 Then
.Visible = False
End If
End With
End Sub
Function GetLeftColPos()
'DBgrid1控件中最左边可见列距实现PickList列的位置
Dim i
i = DBGrid1.LeftCol
GetLeftColPos = 0
If i < 1 Then
Do While i < 1 '该处1的列系实现PickList的列
GetLeftColPos = GetLeftColPos + DBGrid1.Columns(i).Width
i = i + 1
Loop
End If
If i > 1 Then
Do While i > 1 '该处1的列系实现PickList的列
GetLeftColPos = GetLeftColPos - DBGrid1.Columns(i).Width
i = i - 1
Loop
End If
End Function
图二为用VB代码编写的PickList 功能的例子。


图二、用VB代码实现DBGrid的列PickList例图

以上代码在VB6.0、Windows98中文版中通过。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: DbGridEh 是 Delphi 的一个数据表格控件,可以用于显示和编辑数据库的数据。它具有丰富的功能和灵活的配置选项。 下拉选择是 DbGridEh 的一个特殊功能,可以用于在单元格显示一个下拉框,以提供选择项。当用户点击单元格时,下拉框会展开,用户可以从预先定义的选项选择一个值。选择后,下拉框会收起,并将选的值显示在单元格。 要实现下拉选择功能,可以通过 DbGridEh 的属性来进行配置。首先,需要设置目标单元格的 Column 对象的 PickList 属性,该属性是一个 TStringList,用于存储下拉框的选项。可以通过 Add 方法向 PickList 添加选项。 然后,需要设置目标单元格的 Column 对象的 PickListShowCheckboxes 属性,该属性指定是否显示下拉框的复选框。如果设置为 True,则下拉框的选项将显示为带有复选框的列表,用户可以选择多个值。如果设置为 False,则下拉框的选项将只显示为单选列表。 最后,需要设置目标单元格的 Column 对象的 ButtonStyle 属性为 cbsEllipsis,以显示一个下拉按钮,用于展开和收起下拉框。当用户点击这个按钮时,下拉框将展开或收起。 通过以上的配置,可以在 DbGridEh 实现下拉选择功能。用户可以通过点击单元格或下拉按钮来选择一个值,选择后,选的值将显示在单元格。这个功能可以提高用户的体验,使用户可以方便地选择和编辑数据库的数据。 ### 回答2: dbgrideh 是一个用于数据展示的控件,而下拉选择则是一种用户交互方式。 在 dbgrideh ,下拉选择通常用于编辑某个数据字段的取值。当用户需要修改或输入数据时,可以点击对应的单元格,触发下拉选择框的显示。下拉选择框会展示字段可能的取值集合,用户可以从选择一个值进行修改或输入。一般来说,下拉选择的取值集合可以是一个固定的列表,也可以是通过查询数据库动态获取的数据。 使用 dbgrideh 的下拉选择具有以下几个优点: 1. 提高数据录入的准确性:通过下拉选择,用户只能从预设的取值列表选择,避免了用户输入错误或超出范围的问题。 2. 方便用户快速选择:下拉选择框会展示所有可选的取值,用户可以直接点击选择,避免了手动输入的繁琐。 3. 提升用户交互体验:下拉选择为用户提供了直观的数据修改方式,使得界面更加友好、易用。 当我们使用 dbgrideh 下拉选择时,通常需要配置下拉选择框的取值来源,例如设置下拉列表的数据集合、设置下拉列表的显示字段和值字段等。同时,也可以根据业务需求,自定义下拉选择框的外观和行为。 需要注意的是,使用下拉选择时需要考虑到数据完整性和一致性。即要确保下拉列表的取值集合与实际业务需求一致,并及时更新和维护。同时,还需要处理好数据的校验、关联和级联更新等问题,以保证数据的准确性和一致性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

coolstar

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值