在Rad Studio 10.3中,我使用LiveBindins向导并选择FireDAC将StringGrid连接到数据库。一切都很好,除了以下问题:
当用户编辑单元格并按Enter时,将正确编辑该值,但是新值只有在用户导航到另一行后才发布到数据库。换句话说,如果用户更改单元格的值并停留在当前行,则新值不会发布到数据库中。
编辑完成后,有什么方法可以立即发布新值?如果是,怎么办?
如果需要样本,请填写我的问题样本项目的here is the link。
最佳答案
新值未发布到数据库!
不是这样的原因之一是允许用户改变主意并取消更改。数据库中的更改通常涉及激活的连锁后果,例如由服务器端触发器对其他表进行更改/添加/删除,以保持数据的一致性。
因此,您需要调用数据集的Post
方法以将更改保存到数据库,最好是在为用户提供确认或取消更改的机会之后。 TBindNavigator是一种常用的非侵入式方法,它包含Save
和Cancel
按钮,一旦对数据集中的任何字段进行更改,它们便会亮起,因此避免了面对用户的麻烦。带有弹出对话框,询问是否应进行更改或取消更改。
如果要避免使用TBindNavigator,可以在StringGrid上设置事件处理程序,如下所示:
procedure TForm2.StringGrid1EditingDone(Sender: TObject; const ACol,
ARow: Integer);
begin
if DataSet.State in [dsEdit, dsInsert] then
DataSet.Post;
end;
关于delphi - 如何在Firemonkey TStringGrid中完成编辑后立即将数据发布到数据库,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57644322/