请大家帮忙,一个小问题(100分)

  • 主题发起人 主题发起人 shockjoy
  • 开始时间 开始时间
S

shockjoy

Unregistered / Unconfirmed
GUEST, unregistred user!
一个dbgrid已经连接到datasource,请问如何动态修改记录在表格里显示的值,而不是修改数据库,谢谢。
 
这种要求不合理,不修改数据库?你还是建一个事务,最后提交或取消吧
 
可以在字段的OnGetText/OnSetText事件中写代码来控制。
 
数据库的一种机制就是这样子的,最后才写入到数据库中。
如果你根本不想最终修改数据库的话,就不要使用Dbgrid这个数据敏感控件;
~~~~~
如果你最终还是要修改数据库的话,可以用事务来实现。
 
在dbgrid的datasource.dataset active=true 之前
将dbgri.datasource.dataset.locktype 改为:ltbatchoptimistic
之后所有的修改post后只要不updatebatch()不会提交数据库
在dbgrid的datasource.dataset active=false 之后
将dbgri.datasource.dataset.locktype还原
 
也许你没有最后提交修改内容
table1.post就可以了
 
大家没有明白我的意思,我是说比如有一个员工资料表id name sex age等字段,还有另外一些表
比如sex表,有sexid,sex两个字段,员工资料表例的sex是sex表里的sexid字段,这两个表里的字段已经关联,
我在dbgrid里也不能光显示sexid吧,所以要把sex显示出来,这样就要修改显示值,而不修改数据库。
 
你的意思是如果if sexid=0 then 显示 "男"
如果这样的话,自己重画不就行了?(OnOwnerDraw)
 
呵呵,这样啊,自己生成一个查找字段就行了
NEW一个FIELD,LOOKUP型,设置KEY和SOURCE就OK了
 
小弟是个菜鸟,可否请Chenlili和menxin两位大哥说详细点,对什么控件的onownerdraw事件写代码?
怎么写。
 
DBGrid1.DefaultDrawing := false;

procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect; Field: TField; State: TGridDrawState);

begin
if Table1.FieldByName('Size').AsFloat > 10 then
DBGrid1.Canvas.Font.Color := clRed;
DBGrid1.DefaultDrawDataCell(Rect, Field, State);
end;
 
呵呵,你还真有性别库啊,不太值得呀

你在你的员工资料库的TABLE上双击,然后加入所有字段,在新建一个LOOKUP型字段,设置一下就行了

其实没必要建这个表,用一个计算字段或用ONGETTEXT就行
 
我觉得还是用stringgrid比较容易控制,又好修改。
 
性别就用Boolean类型字段不就可以了吗,还用其他的干吗?然后用DisplayValues处理就好了。

当然,毛宁之类的性别确实不好处理
 

Similar threads

D
回复
0
查看
934
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
727
DelphiTeacher的专栏
D
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
688
DelphiTeacher的专栏
D
后退
顶部