【问题标题】:How to post data to database immediately after editing is done in a firemonkey TStringGrid如何在 firemonkey TStringGrid 中完成编辑后立即将数据发布到数据库
【发布时间】:2019-12-29 20:14:10
【问题描述】:

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

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

有没有办法在编辑完成后立即发布新值?如果是,怎么做?

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

【问题讨论】:

    标签: delphi firemonkey tstringgrid livebindings rad-studio


    【解决方案1】:

    新值未发布到数据库!

    不这样做的一个原因是允许用户改变主意并取消更改。数据库中的更改通常涉及激活的连锁反应,例如通过服务器端触发器对其他表进行更改/添加/删除以保持数据的一致性。

    因此,您需要调用数据集的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;
    

    【讨论】:

    • 感谢您的回答!实际上,在这种情况下,我不想拥有 BindNavigator,也不想得到用户的确认(基于我客户的请求)。当用户在编辑单元格后按 Enter 时,我需要立即发布数据。那我该怎么做呢?
    • 如果您在 q.无论如何,请参阅我的答案的更新。
    • 我的错!非常感谢您的帮助。
    猜你喜欢
    • 2015-06-20
    • 2019-11-15
    • 1970-01-01
    • 1970-01-01
    • 2013-08-11
    • 1970-01-01
    • 2020-11-07
    • 1970-01-01
    • 2011-12-26
    相关资源
    最近更新 更多