请问在DbGrid里面如何才能做到只有新添加的行才能修改? 试下在数据集的状态改变时判断如果是dsEdit则把DBGrid改为只读,如果是dsInsert 则改只读为假 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 “如果是dsEdit则把DBGrid改为只读”,那么整个dbgrid不就都变成只读了?我想要的是最新插入的记录可修改,其余的记录是只读!“如果是dsInsert 则改只读为假”,这样同样会导致插入一条记录而整个dbgrid都变成可修改的了,这样不行,我只想要新插入的那行可修改! procedure TForm1.DataSource1DataChange(Sender: TObject; Field: TField);begin with DataSource1 do if not DataSet.Eof then DbGrid1.ReadOnly := DataSet.RecNo <> DataSet.RecordCount;end; 给DBGrid1的readonly属性赋值之后,是不是整个DBGrid1都变成只读或者可写了?这样的结果并不是我想要的! 经常向外弹出小窗口,可不是什么好行为:)总之,我重申:PowerBuilder的数据库窗口有一个功能,就是可以通过某种设置,使得只有通过程序新添加的行才能被用户修改,其它通过检索数据库得到的数据不能修改。我想在Delphi中实现相同的功能,请问在DbGrid里面如何才能做到只有新添加的行才能修改? 那你最好还是别用DBGrid去下个第三方控件,如果愿意的话,自己写一个也行,到时想怎么样就怎么样![写简单的控件我还会,写类似DBGrid的,我还没试过,呵呵:)] 给DBGrid1的readonly属性赋值之后,是不是整个DBGrid1都变成只读或者可写了?这样的结果并不是我想要的!你们之间有误解。如果你的焦点在新加的一行,那么能不能修改和grid得只读是一样的,为什么不是你想要的呢?既然焦点在你关心的那一行,即使grid属性为可编辑,你也不会碰到其他行的。细想,你的问题没有阐述清楚 设dataset的CachedUpdates为True然后在DBGrid的KeyDown中DBGrid1.ReadOnly := Table1.UpdateStatus <> usInserted;不过效果不太好 还是举个例子说得比较清楚:假设,有一个dbgrid,open的时候出来5行记录,现在我新插入一行,也就是说只有第6行才是新增记录。那么由于焦点随时都是可变的,比如单击第2条,焦点就转到第2行,但是由于第2行是从数据库检索出来的,因此我不希望这条记录可修改;但是如果单击第6条,焦点转到第6行以后由于第6行是新增的,因此我希望这条记录可修改。就是这样,该如何解决? 点击第6行时,可编辑,单击其它行时,不可编辑.用一个变量保存新insert的行号,然后,不用我说了吧.如果你一次只能insert一行,应该可以,如果insert多行,可能需要数组来保存了,post后把变量清空. liu7537:你试试我的那个,有你说的那种效果不过好象有些毛病 DbGrid是cachedupdated,用户新插入一行之后,如果他这个时候用鼠标单击其它的行,这时候整个dbgrid的状态就变了,用户再回到新增加的行的时候,仍然是无法更新。换句话说,向dbgrid插入一行之后,无论用户怎么改变行焦点,新增的行应该始终是可修改;而其它行始终是只读。如果有人懂得PB,相信能够更好的理解我的需求。 在CachedUpdated为True时DBGrid1.ReadOnly := Table1.UpdateStatus <> usInserted;可以把这句放在DataSource的OnDataChange里,这样无论点击,还是按键都可以顺便说一句,我以前也用过一段时间pb,有些忘了我觉得好象pb也是根据这种更新状态的把 这种界面是如何制作的呢? 前无古人,后无来者,不得不看的东东 KV2009,支持查找Delphi特定病毒 自定义类,并 如何搜索文件并且在其路径文件夹中创建新文件 一个有关"IntToStr 将整型数转换为字符串"的问题 FasterReport换页问题!急! udp 数据发送 SOS! 初学,请教如何获得本机IP地址? 简单问题:进程(copy或load文件时)怎样控制? 关于控件的问题,很急! 怎样得到BDE内设置的别名列表,以及该别名的包含的表名列表?
那么整个dbgrid不就都变成只读了?我想要的是最新插入的记录可修改,其余的记录是只读!
“如果是dsInsert 则改只读为假”,这样同样会导致插入一条记录而整个dbgrid都变成可修改的了,这样不行,我只想要新插入的那行可修改!
begin
with DataSource1 do
if not DataSet.Eof then
DbGrid1.ReadOnly := DataSet.RecNo <> DataSet.RecordCount;
end;
这样的结果并不是我想要的!
去下个第三方控件,如果愿意的话,自己写一个也行,到时想怎么样就怎么样!
[写简单的控件我还会,写类似DBGrid的,我还没试过,呵呵:)]
这样的结果并不是我想要的!你们之间有误解。如果你的焦点在新加的一行,那么能不能修改和grid得只读是一样的,为什么不是你想要的呢?既然焦点在你关心的那一行,即使grid属性为可编辑,你也不会碰到其他行的。细想,你的问题没有阐述清楚
然后在DBGrid的KeyDown中
DBGrid1.ReadOnly := Table1.UpdateStatus <> usInserted;
不过效果不太好
用一个变量保存新insert的行号,然后,不用我说了吧.
如果你一次只能insert一行,应该可以,如果insert多行,
可能需要数组来保存了,post后把变量清空.
不过好象有些毛病
DBGrid1.ReadOnly := Table1.UpdateStatus <> usInserted;
可以把这句放在DataSource的OnDataChange里,这样无论点击,还是按键都可以
顺便说一句,我以前也用过一段时间pb,有些忘了
我觉得好象pb也是根据这种更新状态的把