想做一个DBgid录入的效果,比DBgrid中下拉选择某一个员工编号,然后在Grid的其它列自动出现该员工的其它信息(如员工姓名性别等信息).员工编号  员工姓名  性别
001        张三    男

解决方案 »

  1.   

    在ColWidthsChanged事件中写代码,
      

  2.   

    delphi反正不行,如果可以你发e_mail 给我[email protected]
    你用第三方控件吧,cxgrid也许可以
      

  3.   

    在你要设置录入效果的列上放一个combobox控件;^_^;
      

  4.   

    在你要设置录入效果的列上放一个combobox控件;^_^;
    ,然后根据你选择的用户ID,从数据库里查找相关信息,并且填入DBGrid。
      

  5.   

    DBgid可以通过设置达到下拉效果,其他字段的信息需通过程序写
      

  6.   

    在'员工编号'字段的SetText事件写代码呀.
    根据员工编号查询出员工姓名等值.
      

  7.   

    呵呵  水平不够  不知道  不过最近也在用DELPHI编写程序  支持
      

  8.   

    哦,我想也许用第三方控件,应该可以有办法,如果用DBGrid实现起来估计会比较麻烦。
    请大家继续讨论,希望能有一个比较好的解决方案。
      

  9.   

    我以前用pb写,用下拉数据窗口,简便到了极点,delphi刚学,感觉比较麻烦
      

  10.   

    其实最好不要在dbgrid中直接录入数据,可以在一个窗体中做录入数据
    然后在dbgrid中显示数据,这样更安全一点……
    如果要录入,同意楼上的讨论……
      

  11.   

    我要做凭证录入的话,似乎必须在dbgrid中录入名细
      

  12.   

    可在你的QUERY中添加FIELDTYPE为LOOKUP的字段员工姓名/性别与你的员工编号相对应,来显示出你所需要的
      

  13.   

    有一个网上的朋友友用VB可以实现我想要的功能,D中难道就不能实现吗?
      

  14.   

    从葵花宝典上摘抄一段东西;希望对楼主有用;
    在DELPHI中利用API实现网格内组件的嵌入--------------------------------------------------------------------------------  Delphi中向TDBGrid添加组件是一件十分麻烦的事情。笔者在这里向大家介绍一种利用WIN32 API函数在TDBGRID中嵌入CHECKBOX组件的方法。  TDBGrid部件是用于显示和编辑数据库表中记录信息的重要部件,它是我们在程序设计过程中要经常使用的一个强有力的工具。TDBGrid具有很多重要的属性,我们可以在程序设计阶段和程序运行过程中进行设置。TDBGrid部件中有很多重要的属性,我们在这里重点介绍Option属性和DefaultDrawing属性,其他属性及其设置方法请参看联机帮助文件。  Options属性:它是TDBGrid部件的一个扩展属性,在程序设计阶段设置Options属性可以控制TDBGrid部件的显示特性和对事件的响应特性。  DefalultDrawing属性:该属性是布尔型属性,它用于控制网格中各网格单元的绘制方式。在缺省情况下,该属性的值为True,也就是说Delphi使用网格本身缺省的方法绘制网格中各网格单元,并填充各网格单元中的内容,各网格单元中的数据根据其对应的字段部件的DisplayFormat属性和EidtFormat属性进行显示和绘制。如果DefaulDrawing属性被设置为False,Delphi不会自动地绘制网格中各网格单元和网格单元中的数据,用户必须自己为TDBGrid部件的OnDrawDataCell事件编写相应的程序以用于绘制各网格单元和其中的数据。  需要注意的是,当一个布尔字段得到焦点时,TDBGrid.Options中的 gdEditing属性不能被设置成为可编辑模式。另外,TDBGrid.DefaultDrawing属性不要设置为FALSE,否则,就不能得到网格中画布属性的句柄。  程序设计开始时就应考虑:需要设定一变量来存储原始的 TDBGrid.Options的所有属性值。这样,当一boolean字段所在栏得到焦点时将要关闭TDBGrid.Options中gdEditing的可编辑模式。与此相对应,若该栏失去焦点时,就要重新恢复原始的 TDBGrid.Options的所有属性值。  在实例中可以通过鼠标点击或敲打空格键改变布尔值,这样就需要触发TDBGrid.OnCellClick事件和TDBGrid.OnKeyDown事件。因为这两个事件都是改变单元格中逻辑字段的布尔值,所以为了减少代码的重复最好创建一个私有过程(SaveBoolean;)来完成逻辑值的输入,以后,在不同的事件中调用此过程即可。  对 TDBGrid.OnDrawColumnCell事件的处理是整个程序的关键。处理嵌入组件的显示的传统方法是:在表单上实际添加组件对象,然后对组件的位置属性与网格中单元格的位置属性进行调整,以达到嵌入的视觉效果。这种方法虽然可行但代码量大,实际运行时控制性很差。笔者采用的方法是充分利用WIN32 API函数:DrawFrameControl(),由于此函数可以直接画出Checkbox组件,所以就无须在表单中实际添加组件。如何使用API函数:DrawFrameControl()是本程序技巧所在。  在TDBGrid.OnDrawColumnCell事件中,我想大家会注意到:设定一个整型数组常数,而这个返回的整数值是与布尔值相一致的,如果字段是逻辑字段,则只将其布尔值放入数组中,提供给DrawFrameControl()函数中的状态参数进行调用,从而实现了Checkbox组件在网格中的嵌入效果。  源代码如下:  type   TForm1 = class(TForm)    DataSource1: TDataSource;    Table1: TTable;    DBGrid1: TDBGrid;    procedure DBGrid1DrawColumnCell(Sender: TObject;          const Rect: TRect; DataCol: Integer;          Column: TColumn; State: TGridDrawState);    procedure DBGrid1ColEnter(Sender: TObject);    procedure DBGrid1ColExit(Sender: TObject);    procedure DBGrid1CellClick(Column: TColumn);    procedure DBGrid1KeyDown(Sender: TObject; var Key: Word;          Shift: TShiftState);   private    { Private declarations }    OriginalOptions : TDBGridOptions;    procedure SaveBoolean;   public    { Public declarations }   end;  {...}  procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject;           const Rect: TRect; DataCol: Integer;           Column: TColumn; State: TGridDrawState);  const   // 这个整数值将按照布尔值返回,并送入数组   CtrlState : array[Boolean] of Integer = (DFCS_BUTTONCHECK,DFCS_BUTTONCHECK or DFCS_CHECKED);  begin   //确保只有在逻辑字段才能插入组件   if Column.Field.DataType = ftBoolean then   begin    DBGrid1.Canvas.FillRect(Rect);    DrawFrameControl(DBGrid1.Canvas.Handle,             Rect,             
      

  15.   

    我遇到和樓主差不多的問題﹐正在解決中....
        不過我用建立永久字段的lookup實現一對一的錄入成功﹐但是我也想實現樓主一樣的效果﹐正在摸索中﹔
      
    up up up up up up up !!!!!!