| 网站首页 | JAVA文章 | AppServers | Web开发 | 应用开发 | 资源下载 | 论坛
    想学好编程,学好外语很重要  [enadd  2006年12月25日]        
设为首页 加入收藏 联系站长
您现在的位置: 编程笔记网 >> 应用开发 >> delphi >> 控件应用 >> 文章正文
用DbGrid制作edit录入时的下拉提示框            【字体:
用DbGrid制作edit录入时的下拉提示框
作者:-    文章来源:-    点击数:    更新时间:2006-12-31

在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>0) 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:=0;
      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:=0;
      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>0) 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.0、5.0下均调试通过。  

[1] [2] 下一页  

文章录入:enadd    责任编辑:enadd 
  • 上一篇文章:

  • 下一篇文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最新热点 最新推荐 相关文章
  • Delphi的dbgrid中根据数据的…

  • 给DBGrid加入排序功能

  • 将 DBGrid 中的内容输出至 E…

  • 怎样获得DBGrid中的cell的坐…

  • 多层表头的DBGrid

  • 在 dbgrid 中实现 copy、pas…

  • 禁止在DBGrid中按delete删除…

  • 给 DBGrid 添加搜索功能

  • 数据网格自动适应宽度

  • 移除DBGrid的垂直滚动条

  •   网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    | 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 | 管理登录 |