我在一个窗口上放了一个dbgrid1,然后通过adoquery1连接数据库的employer(职员表),在employer中有一个字段dep_id(部门代码),这个字段是参照department(部门代码表)中的dep_id.在department(部门代码表)中还有一个字段dep_name(部门名称)。我的问题是如何让dbgrid1中的一列生成下拉框,下拉框的内容是从数据库department(部门代码表)中读出部门名称,而不是部门的代码,当在下拉框修改了某个员工的部门名称后,存入数据库employer(职员表)的数据是部门的代码,而不是部门名称。请问要如何实现上述功能? 
谢谢

解决方案 »

  1.   

    请参考“查询”字段。
    简单提示:
       双击table,点击右键,选择ADD FIELD;再选择“LOOK UP”
      

  2.   

    可以实现。记得一本书上有个例子。
    好像是使下拉列表框覆盖dbgrid得一列。然后使
      

  3.   

    双击DBGRID1控件,在对话框中选择要有下拉列表的框,然后在属性窗口中找到PICKLIST属性,在其中输入部门名称就可以了!利用属性PICKLIST来编程动态实现也可以啊!你自己想想吧!:)
      

  4.   

    在form上放一个ComboBox组件,设定它的visible为false
    先把另一个数据表的可用记录放入其中procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    begin
      if gdfocused in state then
      begin
        if column.FieldName='xxx' then    //xxx为你要让combobox显示的那列的字段名
        begin
          ComboBox1.Left:=rect.Left+form1.DBGrid1.Left;
          ComboBox1.Top:=rect.Top+form1.DBGrid1.Top;
          ComboBox1.Width:=rect.Right-rect.Left;
          ComboBox1.Height:=rect.Bottom-rect.Top;
          ComboBox1.Visible:=true;
        end;
      end;
    end;
      

  5.   

    用lookup字段很容易解决的,值是根据代码,显示是名称,呵呵,很简单的