用DbGrid制作edit录入时的下拉提示框
来源:互联网 发布:麻瓜编程简书 编辑:程序博客网 时间:2024/05/16 19:24
在Delphi语言中提拱了不少数据输入的方法,如可从数据库中选择或人工输入的控件有:DBListBox、DBComboBox、DBLookupListBox、DBLookupComboBox等。但对于这样一个例子:数据库名为dm.db,其中有两个字段:
代码:Code
名称:Name
要求根据用户输入的代码,去获取该代码对应的名称。
一般的用户并不知道代码和名称的对应关系,如让用户输入代码,选出对应的名称,由于上述的控件不能使操作人员看到代码和名称的对应关系,如让用户根据代码用下拉框去查找到对应的该条纪录的名称,将很难操作。
根据这种情况,我编制了下面程序,把DBGrid做为Edit的下拉列表框辅助操作,在DBGrid中直观地显示出代码和名称的对应关系,并且能够根据用户录入代码的变化情况,随时更新DBGrid中的记录指针,使用户可以直观方便地点取所需要的名字,而且DBGrid是依据用户在Edit中输入代码时才显现,跳出Edit框即消失。这种方法既为用户录入提供了方便,又不影响界面的整体美观,效果不错。现把该程序提供给大家,你们可根据自己的需要,对程序进行加工处理,应用于程序开发中,希望起到抛砖引玉的作用。
【问题】:做这样一个小程序:让用户输入代码,然后将名称显示在窗体上。
1、首先我们可以建立一个Form,在此Form中增加控件:
Table : Table1,设置其属性对应代码库dm.db,并将Active置为True
DataSource : DataSource1, 设置其属性DataSet为Table1
Edit : CodeEdit,NameEdit分别对应代码输入框和名称显示框
DBGrid : DBGrid1, 设置其属性DataSource为DataSource1
并把CodeEdit的属性Text的值置空,NameEdit的属性Text的值置空。
2、对照以下语句,修改CodeEdit的OnEnter、OnExit、OnKeyDown、OnKeyUp事件:
在CodeEdit的OnEnter事件如下:
procedure TForm1.CodeEditEnter(Sender: TObject);
begin
if CodeEdit.text<>"" then
begin
CodeEdit.SelStart:=length(CodeEdit.text);
Table1.locate("code", CodeEdit.text,[lopartialkey]);
End;
end;
CodeEdit的OnExit事件如下:
procedure TForm1.CodeEditExit(Sender: TObject);
begin
if activecontrol<>dbgrid1 then
begin
dbgrid1.Visible:=false;
Table1.Locate("code",codeedit.text,[lopartialkey]);
if Table1.Eof then
begin
dbgrid1.Visible:=true;
exit;
end;
if not Table1.Eof then
begin
codeedit.Text:=Table1.fieldbyname("code").asstring;
NameEdit.Text := Table1.fieldbyname("name").asstring;
end;
end;
end;
CodeEdit的OnKeyDown事件如下:
Procedure Tform1.CodeEditKeyDown(Sender: TObject;var Key: Word;Shift: TShiftState);
var
i:integer;
begin
if (Table1.RecordCount>) then
begin
case key of 48..57:
begin
dbgrid1.Visible:=true;
Table1.Locate("code",CodeEdit.text,[lopartialkey]);
end;
vk_next:
if dbgrid1.Visible then
begin
i:=;
while (not Table1.Eof) and (i<11) do
begin
Table1.Next;
i:=i+1;
end;
CodeEdit.Text:=Table1.fieldbyname("code").asstring;
End;
vk_prior:
if dbgrid1.Visible then
begin
i:=;
while (not Table1.Bof) and (i<11) do
begin
Table1.prior;
i:=i+1;
end;
CodeEdit.Text:=Table1.fieldbyname("code").asstring;
end;
vk_down:
if dbgrid1.Visible then
begin
if not Table1.Eof then
begin
Table1.Next;
CodeEdit.Text:=Table1.fieldbyname("code").asstring;
end;
end;
vk_up:
if dbgrid1.Visible then
begin
if not Table1.Bof then
begin
Table1.Prior;
CodeEdit.Text:=Table1.fieldbyname("code").asstring;
end;
end;
end;
end
else
dbgrid1.Visible:=false;
CodeEdit.SelStart:=length(CodeEdit.text);
end;
CodeEdit的OnKeyUp事件如下:
procedure Tform1.CodeEditKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
if (Table1.RecordCount>) then
begin
if ((key>=48) and (key<=57)) then
Table1.Locate("code",codeedit.text,[lopartialkey]);
if (key=VK_back) and (codeedit.text<>"") then
Table1.Locate("code",codeedit.text,[lopartialkey]);
if (key=VK_BACK) and (codeedit.text="") then
Table1.First;
if (key=vk_down) or (key=vk_up) or (key=vk_prior) or (key=vk_next) then
if dbgrid1.Visible then
codeedit.Text:=Table1.fieldbyname("code").asstring;
end
else
dbgrid1.Visible:=false;
codeedit.SelStart:=length(codeedit.text);
end;
本程序在Windows98+Delphi4.、5.下均调试通过。
- 用DbGrid制作edit录入时的下拉提示框
- “年月日”录入时的一个小漏洞
- DBGrid(下拉框外部数据)
- FA固定资产录入时的细节:是否输入累计折旧
- 设置DBGrid某列具有下拉列表框,下拉另一个DataSet的数据
- 动态提示的下拉框
- 动态提示的下拉框
- 带提示的下拉框
- 动态提示的下拉框
- 游戏中Edit的制作
- nfs写入时提示read-only file system的原因
- ComboBox下拉DBGrid第三方控件的例子
- Swing提示框的制作
- Windows提示框的制作
- asp.net 后台录入时,检测安全性的两句代码
- 一个好用的DBGRID
- 一个好用的DBGRID
- 数据录入时自动复制原记录
- [原创]SP的前途??(猛回头,警世钟)[转贴]
- 了解DLL函数
- (转)成功老板的8个好习惯
- 国内Nokia手机主要参数列表
- 八个中文WAP搜索引擎[转贴]
- 用DbGrid制作edit录入时的下拉提示框
- 源代码就是设计 续篇
- Hibernate中outer-join与lazy关键字的使用
- Win2000模块解析工具
- 【做人:一,性格和习惯的重要性[转载]】
- SuSE and NLD9 user pls note
- hibernate要点
- 领带的打法10种——男士必看(图)
- 我的fedora core 3汉化之旅