现在有两个数据表T1(人员信息)、T2(部门信息)
需要在DBGRID中显示表1的纪录内容,表1中有一字段名为部门编号,现在希望DBGRID的该字段的PICKLIST显示所有部门编号列表,而显示所有部门名称列表,当提交的时候提交相应部门的部门编号。我想在用户完成PICKLIST的选择后马上讲所选择的部门名称转换成部门编号,可是找不到相应的事件去填写代码,在OnColExit事件中好像不是很敏感,有时候会把其他行的数据转换后进行填写,请高手解决!送100分,在线等

解决方案 »

  1.   

    更正一下,应该是:现在希望DBGRID的该字段的PICKLIST不显示所有部门编号列表,而显示所有部门名称列表,当提交的时候提交相应部门的部门编号
      

  2.   

    procedure TF_Employee.DBGrid1ColExit(Sender: TObject);
    var i,j:integer;s:string;
    begin    s:=DBGrid1.Columns.Grid.Fields[5].Text;
        for j:=0 to length(s) do
        begin
          if (ord(s[j])>=176) and (ord(s[j])>=161) then
          begin
             try
                ADOT1.TableName:='Qualification';
                ADOT1.Filter:='Role_Name='''+trim(s)+'''';
                ADOT1.Active:=true;
                ADOT1.Filtered:=true;
                ADOT.Edit;
                DBGrid1.Columns.Grid.Fields[5].Text:=ADOT1.FieldByName('Role_ID').AsString;
             except
             end;
             break;
          end;
        end;end;我把代码写在DBGrid1ColExit(Sender: TObject)事件中,有时候部门名称会不转换成编号而直接写入数据库表T1,这个事件好像不是很敏感,有解决办法吗?
      

  3.   

    在数据集里写啊!
    比如你的DBGrid连接的是ADOQuery的话,
    双击ADOQuuery,增加需要的字段,然后选中ADOQuery中的编号字段,在OnGetText和OnSetText中写就行了。
    问Delphi问题的话,最好去大富翁吧,或者下载大富翁离线包,700M的CHM,几乎能解决你的所有问题。