用DbGrid制作edit录入时的下拉提示框

    http://www.week5.net   2004年12月01日  

在Delphi语言中提拱了不少数据输入的方法,如可从数据库中选择或人工输入的控件有:DBListBox、DBComboBox、DBLookupListBox、DBLookupComboBox等。但对于这样一个例子:数据库名为dm.db,其中有两个字段:
    代码:Code
    名称:Name
要求根据用户输入的代码,去获取该代码对应的名称。
 
    一般的用户并不知道代码和名称的对应关系,如让用户输入代码,选出对应的名称,由于上述的控件不能使操作人员看到代码和名称的对应关系,如让用户根据代码用下拉框去查找到对应的该条纪录的名称,将很难操作。
 
    根据这种情况,我编制了下面程序,把DBGrid做为Edit的下拉列表框辅助操作,在DBGrid中直观地显示出代码和名称的对应关系,并且能够根据用户录入代码的变化情况,随时更新DBGrid中的记录指针,使用户可以直观方便地点取所需要的名字,而且DBGrid是依据用户在Edit中输入代码时才显现,跳出Edit框即消失。这种方法既为用户录入提供了方便,又不影响界面的整体美观,效果不错。现把该程序提供给大家,你们可根据自己的需要,对程序进行加工处理,应用于程序开发中,希望起到抛砖引玉的作用。
 
【问题】:做这样一个小程序:让用户输入代码,然后将名称显示在窗体上。
 
1、首先我们可以建立一个Form,在此Form中增加控件:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Delphi中,DBGrid没有内置的下拉选择功能。但是我们可以通过一些技巧来实现下拉选择。 一种常见的方法是创建一个隐藏的ComboBox组件,并将其放置在DBGrid上方。当用户单击需要进行下拉选择的单元格,我们可以根据单元格的位置和数据源获取该单元格对应的数据,然后将数据填充到ComboBox中并显示。 当用户选择下拉列表中的某个选项,我们可以通过ComboBox的OnChange事件来更新DBGrid单元格的值,并将ComboBox隐藏起来。 下面是一个简单的示例代码: ```delphi unit MainForm; interface uses // 其他引用的单元 type TForm1 = class(TForm) DBGrid1: TDBGrid; ComboBox1: TComboBox; DataSource1: TDataSource; // 其他声明的组件和数据源 procedure DBGrid1CellClick(Column: TColumn); procedure ComboBox1Change(Sender: TObject); private { Private declarations } procedure ShowComboBox; procedure HideComboBox; procedure FillComboBox(AColumn: TColumn); procedure UpdateDBGridValue(AColumn: TColumn); public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.DBGrid1CellClick(Column: TColumn); begin if Column.Field.DataType = ftString then begin FillComboBox(Column); ShowComboBox; end; end; procedure TForm1.ComboBox1Change(Sender: TObject); begin UpdateDBGridValue(DBGrid1.SelectedField as TColumn); HideComboBox; end; procedure TForm1.ShowComboBox; begin ComboBox1.Visible := True; ComboBox1.SetBounds(DBGrid1.Left + DBGrid1.Columns[DBGrid1.SelectedIndex].Width + 1, DBGrid1.Top + DBGrid1.RowHeights[0] * (DBGrid1.SelectedField.Index + 1), DBGrid1.Columns[DBGrid1.SelectedIndex].Width, DBGrid1.RowHeights[0]); ComboBox1.BringToFront; end; procedure TForm1.HideComboBox; begin ComboBox1.Visible := False; end; procedure TForm1.FillComboBox(AColumn: TColumn); var i: Integer; begin ComboBox1.Clear; // 根据数据源填充ComboBox内容 if AColumn.Field.DataSet.Active then begin AColumn.Field.DataSet.First; while not AColumn.Field.DataSet.Eof do begin ComboBox1.Items.Add(AColumn.Field.AsString); AColumn.Field.DataSet.Next; end; end; end; procedure TForm1.UpdateDBGridValue(AColumn: TColumn); begin if (AColumn.Field.DataType = ftString) and (DBGrid1.SelectedField = AColumn) then begin AColumn.Field.Value := ComboBox1.Text; end; end; end. ``` 需要注意的是,这只是一个简单的示例代码,实际中还涉及更多的细节和逻辑处理。通过以上方法,我们就可以在Delphi中实现DBGrid下拉选择功能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值