【问题标题】:Stop Auto Edit working in TDBGrid停止在 TDBGrid 中工作的自动编辑
【发布时间】:2016-05-05 16:31:10
【问题描述】:

D5、ZEOS 6.6、SQLite。

我有 srcAccount.AutoEdit = False;

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

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

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

dbedAcct.SetFocus;
tblAccounts.Insert;

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

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

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

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

【问题讨论】:

    标签: delphi delphi-5 tdbgrid


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 谢谢,我一直在尝试,但是尝试管理两个单独的表变得太复杂了。添加时我必须同时添加,删除时我必须再次“定位”和相同,当滚动一个时我必须匹配另一个可能进入死循环的。只是太乱了,所以我想问问是否有人想出了更好的系统。
    • 实际上,如果您使用两个客户端 ClientDataSet 实例,它可以非常简单,因为您可以使用 CDS 的 Data 属性轻松地将数据从一个复制到另一个,因此用于查找的本地副本是微不足道的。
    • 您无需复制数据即可使用 CDS 获得两个视图:edn.embarcadero.com/article/29416
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-13
    • 2016-10-27
    • 1970-01-01
    • 2020-11-23
    • 2015-01-03
    • 1970-01-01
    • 2021-01-03
    相关资源
    最近更新 更多