使用dbgrideh很容易,请查看以前的帖子

解决方案 »

  1.   

    在DBGrid上点右健选"Column Editor",然后点右健选“Add AAl Fields”。然后选择你要使用Picklist的字段设置它的Picklist属性即可。—————————————————————————————————
    MaximStr := '宠辱不惊,看庭前花开花落,去留无意;
                 毁誉由人,望天上云卷云舒,聚散任风。';
    if Not Assigned(I) then
      I := TI.Create(Nil);
    I.Maxim := MaximStr;
    I.Explain := '假如上述代码中出现“OA”等字样,删除它们';
    I.Desire := '加不加分随你';
    —————————————————————————————————
           
      

  2.   

    lxpbuaa,虽然设置了他的picklist属性,但是仍然可以不从限定的几个里面选择而随意的输入字符。
      

  3.   

    用LOOKUP字段一定可以
    也最简单
    配上内存表很方便
      

  4.   

    lanbada(lanbada):你说的什么意思?我不知道。
      

  5.   

    就是做一字段是LOOKUP
    它会自动产生下拉框的
    你试试就知了
      

  6.   

    但是在一个DBGrid里面怎么做一个字段是LookUp不明白的说。
      

  7.   

    转发一帖子:
       思路:  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 SubSub 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
      

  8.   

    可以在Dbgrid1的keypress事件中控制键盘
    if Dbgrid1.selectedfield=Dbgrid1.datasource.dataset.fieldbyname('字段名') then
       begin
       if not (key in [#13] then //回车键可以保留,其它屏蔽
          key:=#0;
       end;
    //可能还要在keydown中控制delete键