DBGrid的使用,怎样避免自动Insert?(100分)

  • 主题发起人 主题发起人 xiaorang
  • 开始时间 开始时间
X

xiaorang

Unregistered / Unconfirmed
GUEST, unregistred user!
Delphi5的DBGrid扩展了功能,很好用。但使用DBGrid会遇到一个问题,
在最后一列按TAB键就会自动Insert一行。请教怎样避免这个功能呢?
还有一个问题,使用ADO连接数据库,Insert一行之后,无法直接Cancel,
会不断报错,必须POST,请问有没有办法解决?
 
如果不需要修改数据的话,可以设成read only
 
在dbgrid 的keyoption的属性里将,dgallowinsert 至为false即可
 
onbeforeinsert中加入abort
 
楼上的办法根本不行。因为楼主的意思肯定是要原来的数据可修改。而不可以添加数据。

我有办法。
 
1.onbeforeinsert中加入abort
2....等我一下。
 
zhangyufly朋友说的属性我没找到,也许用了某个第三方的控件,不过在Delphi
随带的控件中没有找到这个属性。
还有,我的意思当然是需修改数据的,但不希望DBGrid控件本身来控制这些操作。
 
比较有效的一个办法是:
在对应数据集控件的beforeinsert()中写入如下代码:
If Form1.activecontrol is Tdbgrid Then Abort;
form1是dbgrid所在的窗口。
 
如果不需要在DBGrid中操作数据,可以简单的设为Readonly,否则可以在onbeforeinsert事件中写代码
 
在afterinsert事件输入abort
 
我试验了一下HHSH朋友的方法
发现有个问题,既然Form1引用了DM,DM就不可能再引用Form1,
所以这个方法可能不行。
 
假设表的第一个字段是关键字。
procedure TForm1.Table1AfterInsert(DataSet: TDataSet);
begin
if Table1.Fields[0].AsString = '' then
Table1.Cancel;
end;
 
在前INSERT判斷一下
 
1.if TDataSource(Sender).DataSet.Eof then
TDataSource(Sender).DataSet.Cancel;
2.在beforepost中实现,如出错,则cancelupdate
 
在DBGRID的ONKEYUP事件中检查 KEY的值,一般的
key=VK_UP
VK_DOWN
VK_LEFT
VK_RIGHT
那么只在检查按下的键那么就能控制在DBGRID编辑时不允许插入记录了.
在这个来件中还有一个用处是:读数据.
试试看,有问题可再讨论.
 
在DBGRID記錄的末尾檢查DBGRID插入時使用的鍵值,然后屏蔽掉就行
 
谢谢大家捧场!
我现在已经有了一个基本的想法,请大家评论一下效率怎么样?顺便对关心此问题的朋友
有个交代。
基本以HHSH的思路为出发点。在DM单元建立一个ControlLock变量;在OnbeforeInsert中
If ControlLock Then Abort;
此变量平时为false,只在许用时才赋为真,用后立即置假。
 
另外,第二个问题也有了答案,从别人的问题处看到的,有关心的也请看。

升级ADO!
ftp://ftpc.borland.com/pub/delphi/devsupport/updates/delphi5/D5EntUpdate.exe
ftp://ftpc.inprise.com/pub/delphi/devsupport/updates/adoexpress/d5adoupdate2.exe
sn:555-555-5555 9ex0-91x0

 
还有,非常感谢大家,初次使用这个论坛,请教一般怎样分配积分为好?
 
后退
顶部