转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件开发 >> Delphi程序 >> 正文
在DbGrid控件中实现PickList功能         ★★★★

在DbGrid控件中实现PickList功能

作者:闵涛 文章来源:闵涛的学习笔记 点击数:958 更新时间:2009/4/23 18:24:51

  前言

  使用Delphi编程的人都知道,在Delphi中数据库控件DbGrid具有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 功能的例子。



以上代码在VB6.0、Windows98中文版中通过。


没有相关教程
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · C语言系列  · VB.NET程序
    · JAVA开发  · Delphi程序
    · 脚本语言
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台