我正在使用标准数据感知组件和 dbExpress 在 Delphi 6 + MySQL 数据库中制作应用程序。该应用程序允许用户查看网格中的记录并在客户端编辑数据(插入和/或删除记录)。然后,这些数据编辑仅在单击提交按钮时才写入数据库。所有这些工作正常,并具有以下设置:
控件: 1. DBGrid1 链接到 DataSource1 以直观地显示数据。2. DataSource1 链接到 ClientDataSet1 以提供数据供 DBGrid 显示。3. ClientDataSet1 与DataSetProvider1 链接,提供客户端数据进行编辑。4. DataSetProvider1 链接 SQLDataSet1,它从单个 DB 表中选择记录。5. SQLDataSet1 链接到 SQLConnection 以提供与 MySQL 数据库的连接。
操作: 1. 用户插入记录:我使用 ClientDataSet1.InsertRecord;2.用户删除一条记录:我使用ClientDataSet.Delete;3、用户提交数据:我使用ClientDataSet1.ApplyUpdates(-1);
这一切在处理数据和发布数据方面都非常有效(包括在 DataSetProvider1BeforeUpdateRecord 上的一个小技巧来删除记录)。
现在我的问题: 当用户第一次加载表单时,DBGrid1 显示所有原始记录,删除所有已删除记录。但是当用户在 ClientDataSet1 中插入一条新记录时,DBGrid1 中会显示一条空白记录。实际数据不会丢失或设置为 NULLS,因为当您使用 ClientDataSet1.ApplyUpdates 时,此记录已正确写入 DB。
我知道 TClientDataSet 有一个用于原始数据的数据属性和一个用于编辑数据的 Delta 属性。这两个带有数据的属性可以一次显示在一个 DBGrid 中并且仍然允许用户编辑数据吗?
我查看了 30 多种资源和演示应用程序,都避免了这个问题。这可以做到吗?