首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >DBNavigator OnClick事件

DBNavigator OnClick事件
EN

Stack Overflow用户
提问于 2021-11-05 15:37:16
回答 2查看 508关注 0票数 0

如果TDBNavigator正确连接,并且没有OnClick事件中的代码,它将按预期工作。我理解问题的地方是当我在事件中放入代码时:

  • nbInsert:插入是完成还是必须通过代码完成?
  • nbPost:我是要通过代码来完成这个任务,还是不管怎么说,帖子都写完了?

当发布完成后,记录将上升到下一个记录--对吗?

EN

回答 2

Stack Overflow用户

发布于 2021-11-05 16:55:31

另一个答案中引用的文档是正确的,但没有提供任何关于DBNavigator工作方式的洞察。DBNavigator操作仅仅反映了TDataSet的默认操作。

每当TDataSet准备执行导航操作(即移动跟踪活动记录的逻辑游标)时,它就调用其CheckBrowseMode方法。

代码语言:javascript
复制
procedure TDataSet.CheckBrowseMode;
begin
  CheckActive;
  DataEvent(deCheckBrowseMode, 0);
  case State of
    dsEdit, dsInsert:
      begin
        UpdateRecord;
        if Modified then Post else Cancel;
      end;
    dsSetKey:
      Post;
  end;
end;

撇开dsSetKey状态不谈,只有当数据集的状态是dsEdit或dsInsert时,才会这样做。如果是,则调用UpdateRecord将对dataset字段所做的任何更改写回dataset的活动缓冲区。

如果(但仅限于)调用UpdateRecord将导致设置dataset的修改标志,则CheckBrowseMode将调用其Post方法,否则将调用Cancel,从而放弃任何更改。将修改设置为true的唯一方法是通过TDataLink后代操作将dataset的字段连接到数据库感知控件(如TDBEdits )。

重要的是要理解是对Post的调用保存了任何更改,并且无论是什么触发了对CheckBrowseMode的调用都会发生这种情况。其中一个这样的触发器,但只有一个,是dBNavigator的导航按钮之一,被点击的nbFirst、nbPrior、nbNext、nbLast。

CheckBrowseMode的操作还解释了如果您立即单击nbInsert、nbFirst、nbPrior、nbNext或nbLast会发生什么,即默认情况下,“插入”记录被放弃。

票数 1
EN

Stack Overflow用户

发布于 2021-11-05 16:06:45

根据Vcl.DBCtrls.TDBNavigator.OnClick

在执行操作后单击数据库导航器上的按钮时发生。 使用OnClick事件处理程序编写响应单击事件的代码。因为导航器上的按钮已经具有单击时发生的默认操作,因此不必编写OnClick事件处理程序。 注意事项:在单击按钮的默认操作之后发生OnClick事件。

所以:不,你不需要自己做任何动作。或者更准确地说:已经太晚了。

根据导航按钮的文档,使用"Post“并不意味着任何记录移位。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69855731

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档