在 Rad Studio 10.3 中,我通过使用 LiveBindins 向导并选择 FireDAC 将 StringGrid 连接到数据库。一切都很好,除了以下问题:
当用户编辑单元格并按 Enter 时,值被正确编辑,但新值不会发布到数据库,直到用户导航到另一行。换句话说,如果用户更改单元格的值并停留在当前行,则新值不会发布到数据库。
有没有办法在编辑完成后立即发布新值?如果是,如何?
如果此处需要示例是我的问题示例项目的链接。
在 Rad Studio 10.3 中,我通过使用 LiveBindins 向导并选择 FireDAC 将 StringGrid 连接到数据库。一切都很好,除了以下问题:
当用户编辑单元格并按 Enter 时,值被正确编辑,但新值不会发布到数据库,直到用户导航到另一行。换句话说,如果用户更改单元格的值并停留在当前行,则新值不会发布到数据库。
有没有办法在编辑完成后立即发布新值?如果是,如何?
如果此处需要示例是我的问题示例项目的链接。
新值未发布到数据库!
原因之一是允许用户改变主意并取消更改。数据库中的更改通常涉及连锁后果,例如由服务器端触发器激活以对其他表进行更改/添加/删除以保持数据的一致性。
因此,您需要调用数据集的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;