如何在 Delphis LiveBindings 中提取 BindSource 的对象?

How to extract Object of a BindSource in Delphis LiveBindings?

在 Delphi 10.1 中,我有一个名为 DogCollection 的 ObjectList 每个条目都是 TDog 类型,自定义 class.

感谢 malcolm groves 的教程,我能够填充 Stringgrid 与我的 DogCollection。

http://www.malcolmgroves.com/blog/?p=1084

现在我希望能够滚动 stringgrid,每次滚动我都想更新 TDog 类型的变量 "CurrentDog",无论 Object 在 stringgrid 中突出显示。

所以我有一个关于我的 DogObjects 的概述以及我的 Dog 的一个对象 我可以独立 view/manipulate.

我现在没主意了。

如果对您有帮助,我也无法触发 Adapter 的 AfterScroll 事件,即使我使用 RightClick->Add Navigator 添加 Navigator 也无法触发。

感谢您的帮助和时间。

不确定是否理解问题,但我认为您不需要变量 "CurrentDog" 来处理列表的 selected 对象。

您可以为您的狗(姓名、年龄...)创建您需要的所有组件 (TEdit),并将这些组件绑定到您的 TDataGeneratorAdapter(已链接)中的相同字段(姓名、年龄...)到您的 TAdapterBindSource 的 "Adapter" 属性。

然后,当您 select 网格中的一行时,相应的对象会出现在您的编辑组件中。当您修改 "Text" 属性时,网格会更新。

编辑:内部适配器

经过几次搜索,您可以使用 TAdapterBindSource 的 InternalAdapter 获取对象

关于 OnClick 事件:

procedure TForm1.Button1Click(Sender: TObject);
var
  Adapter: TBindSourceAdapter;
begin
  Adapter:= AdapterBindSource1.InternalAdapter;

  CurrentDog:= TDog(Adapter.Current);
end;