在我的应用程序中,这些数据组件链接如下:
DBGrid > (DataSource > ADOQuery > ADOConnection)
DBNavigator > (DataSource > ADOQuery > ADOConnection)
每当用户从DBGrid中选择不同的行或使用DBNavigator时,ADOQuery的当前记录都会发生变化。很好,但是当用户对当前记录进行一些更改,然后离开它时,所做的更改就会丢失。
我想显示一个确认对话框,如果有任何更改,用户需要确认导航离开当前记录。并且,当用户点击“否”时,我希望应用程序不要更改当前记录。
我应该在哪里插入代码?在用户导航离开当前记录之前触发了哪个事件,如何阻止该操作继续?
if anythingChanged then
if messageDlg(...)=mrNo then
ADOQuery.dontChangeCurrentRecord;
答案 0 :(得分:4)
在'BeforeScroll'上放置条件中止;
procedure TForm1.ADOQuery1BeforeScroll(DataSet: TDataSet);
begin
if TAdoQuery(DataSet).Modified then //if anythingChanged then
Abort;
end;
答案 1 :(得分:1)
奇怪。在这种情况下,您使用哪种网格不会自动调用Post?
如果你想做这样的事情,可能是放置事件处理程序的最佳位置,如果网格没有为它提供方便的事件,则可能是数据集的BeforeScroll事件。要阻止更改的应用,您可以拨打Abort
。