dbgrid控件的记录显示(100)

  • 主题发起人 主题发起人 changetao
  • 开始时间 开始时间
C

changetao

Unregistered / Unconfirmed
GUEST, unregistred user!
程序记录的录入编辑界面如下:--------------------------------------------------------------------------手术码 手术名 日期 手术者 一助 二助 ……-------------------------------------------------------------------------- 80.51 椎间盘切除术 09.02.28 高× 王×× 李××--------------------------------------------------------------------------但在数据库中的记录为:--------------------------------------------------------------------------住院号 手术码 手术名 日期 手术者 一助 二助 ……--------------------------------------------------------------------------50123 80.51 椎间盘切除术 09.02.28 35201 35202 35203---------------------------------------------------------------------------医生代码表:-------------------------------代码 姓名 助记码-------------------------------35201 高×× g××35202 王×× w××35203 李×× l××-------------------------------手术表--------------------------编码 手术名80.51 椎间盘切除术--------------------------即存储时手术者字段,一助,二助字段,不是存储姓名,而是医生的代码,但在添加以及修改状态下,grid中显示的是代码所对应的医生姓名,手术录入和医生录入通过助记码录入的,请问改如何做呢?谢谢!
 
设置字段的OnGetText和OnSetText事件就可以实现了,你查找一下这方面的资料。
 
procedure 一助change;begin 数据库.fieldbyname('一助').onchange := Nil; with 医生代码表 do begin if locate('代码',代码,[]) then begin 数据库.edit; 数据库.fieldbyname('一助').asstring := 医生代码表.fieldbyname('姓名').asstring; 数据库.post; end; end; 数据库.fieldbyname('一助').onchange := 一助change;end;
 
给你个案例吧,假设字段名称为State,设置该字段的OnGetText/OnSetText事件如下:procedure TForm1.Table1STATEGetText(Sender: TField; var Text: String; DisplayText: Boolean);begin if Sender.DataSet in dsEditModes then Text:=Sender.AsString //新增或者编辑模式,直接显示代码 else begin Text:= 将Sender.AsString,由代码转化为名称 end;end;procedure TForm1.Table1STATESetText(Sender: TField; const Text: String);begin Sender.AsString := Text;end;
 
好的,谢谢,我在看看OnGetText/OnSetText的资料吧吧。
 
多人接受答案了。
 
后退
顶部