D5,ZEOS 6.6,SQLite。
我有srcAccount.AutoEdit = False;
我在TDBGrid选项中将所有编辑功能设置为False。只有选项设置为真是指标,研磨线和标题。
我有一个表格,上面有几个TDBEdits和一个显示所有当前账户的TDBGrid。
当用户点击我有新帐户的“新建”按钮时
dbedAcct.SetFocus;
tblAccounts.Insert;
如果在单击“新建”按钮后,用户想要滚动以检查“帐户名称”,或者碰巧在网格中单击,则会保存新数据并退出“插入”模式。
我怎样才能阻止这种情况发生?我需要他们能够检查帐户名称。
或者,这是D5的错误吗?如果是这样,我该如何解决呢?
我也尝试过使用SMDBGrid,它完全一样。 http://www.scalabium.com/smdbgrid.htm
答案 0 :(得分:4)
我需要他们能够检查帐户名称。
如果您允许用户对网格进行数据输入,则无法使用相同的网格+数据集执行此操作。您正在尝试使用网格进行数据输入和同时查找,从而为自己创建此问题。一个简单的解决方案是使用网格进行查找,并使用单独的表单(或与网格在同一表单上的面板)进行插入,这些需要连接到不同的数据集实例。
问题是,在插入记录的过程中,您无法滚动数据集(因为您需要查找其他记录)。数据集允许滚动所需的dsBrowse状态和插入所需的dsInsert状态是互斥的。正如您所找到的,尝试滚动数据集将自动发布待处理的插入内容。
因此,您实际上需要两个数据集实例,一个用于查找,另一个用于插入。如果您使用两个客户端ClientDataSet实例,它可以非常简单,因为您可以使用CDS的Data属性(cdsLookup.Data := cdsLive.Data
)轻松地将数据从一个复制到另一个,因此可以为其创建本地副本查找是微不足道的。或者,如果您愿意,可以使用克隆光标 - 请参阅http://edn.embarcadero.com/article/29416