如何在 firemonkey TStringGrid 中完成编辑后立即 post 数据到数据库

How to post data to database immediately after editing is done in a firemonkey TStringGrid

在 Rad Studio 10.3 中,我通过使用 LiveBindins 向导并选择 FireDAC 将 StringGrid 连接到数据库。一切都很好,除了以下问题:

当用户编辑单元格并按 Enter 时,值被正确编辑,但新值不会 post 到数据库,直到用户导航到另一行。换句话说,如果用户更改单元格的值并停留在当前行,则新值不会 posted 到数据库。

有什么方法可以在编辑完成后立即post新值吗?如果是,如何?

如果需要示例 here is the link 我问题的示例项目。

the new value is not posted to database!

它不是的一个原因是允许用户改变主意并取消更改。数据库中的更改通常涉及激活的连锁反应,例如通过服务器端触发器使changes/additions/deletions到其他表保持数据的一致性。

因此,您需要调用数据集的 Post 方法以将更改保存到数据库,最好是在为用户提供确认或取消更改的机会之后。 TBindNavigator 是一种常用的非侵入式方法,它包括 SaveCancel 按钮,一旦对数据集中的任何字段进行更改,它们就会亮起,因此它避免了让用户看到一个弹出对话框,询问是否应该进行更改或取消更改。

如果您想避免使用 TBindNavigator,您可以像这样在 StringGrid 上设置一个事件处理程序:

procedure TForm2.StringGrid1EditingDone(Sender: TObject; const ACol,
  ARow: Integer);
begin
  if DataSet.State in [dsEdit, dsInsert] then
    DataSet.Post;
end;