停止在TDBGrid中运行自动编辑

时间:2016-05-05 16:31:11

标签: delphi delphi-5 tdbgrid

D5,ZEOS 6.6,SQLite。

我有srcAccount.AutoEdit = False;

我在TDBGrid选项中将所有编辑功能设置为False。只有选项设置为真是指标,研磨线和标题。

我有一个表格,上面有几个TDBEdits和一个显示所有当前账户的TDBGrid。

当用户点击我有新帐户的“新建”按钮时

dbedAcct.SetFocus;
tblAccounts.Insert;

如果在单击“新建”按钮后,用户想要滚动以检查“帐户名称”,或者碰巧在网格中单击,则会保存新数据并退出“插入”模式。

我怎样才能阻止这种情况发生?我需要他们能够检查帐户名称。

或者,这是D5的错误吗?如果是这样,我该如何解决呢?

我也尝试过使用SMDBGrid,它完全一样。 http://www.scalabium.com/smdbgrid.htm

1 个答案:

答案 0 :(得分:4)

  

我需要他们能够检查帐户名称。

如果您允许用户对网格进行数据输入,则无法使用相同的网格+数据集执行此操作。您正在尝试使用网格进行数据输入和同时查找,从而为自己创建此问题。一个简单的解决方案是使用网格进行查找,并使用单独的表单(或与网格在同一表单上的面板)进行插入,这些需要连接到不同的数据集实例。

问题是,在插入记录的过程中,您无法滚动数据集(因为您需要查找其他记录)。数据集允许滚动所需的dsBrowse状态和插入所需的dsInsert状态是互斥的。正如您所找到的,尝试滚动数据集将自动发布待处理的插入内容。

因此,您实际上需要两个数据集实例,一个用于查找,另一个用于插入。如果您使用两个客户端ClientDataSet实例,它可以非常简单,因为您可以使用CDS的Data属性(cdsLookup.Data := cdsLive.Data)轻松地将数据从一个复制到另一个,因此可以为其创建本地副本查找是微不足道的。或者,如果您愿意,可以使用克隆光标 - 请参阅http://edn.embarcadero.com/article/29416