2016-11-28 3 views
3

Dans Delphi 10.1 j'ai une ObjectList nommée DogCollection et chaque entrée est du type TDog, une classe personnalisée.Comment extraire l'objet d'une source Bind dans Delphis LiveBindings?

grâce à des tutoriels de malcolm bosquets, j'ai pu remplir un Stringgrid avec mon DogCollection.

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

Maintenant, je voudrais être en mesure de faire défiler les stringgrid et chaque fois que je défiler Je veux mettre à jour la variable « CurrentDog » du TDog type, avec tout objet est mis en évidence dans le stringgrid.

J'ai donc un aperçu de mes DogObjects et aussi un seul objet de mon chien que je peux indépendamment voir/manipuler.

Je n'ai plus d'idées pour le moment. Si cela vous aide, je ne peux pas non plus déclencher les événements AfterScroll de l'adaptateur, même si j'ajoute un navigateur avec RightClick-> Ajouter un navigateur.

Je vous remercie de votre aide et de votre temps.

Répondre

1

Je ne suis pas sûr de comprendre la question mais je pense que vous n'avez pas besoin d'avoir une variable "CurrentDog" pour travailler sur l'objet sélectionné de votre liste.

Vous pouvez créer tous les composants (TEdit) dont vous avez besoin pour votre chien (Nom, Âge ...) et lier ces composants aux mêmes champs (Nom, Âge ...) dans votre TDataGeneratorAdapter (qui est lié à la propriété "Adapter" de votre TAdapterBindSource). Puis, lorsque vous sélectionnez une ligne dans votre grille, l'objet correspondant apparaît dans vos composants d'édition. Lorsque vous modifiez les propriétés "Texte", la grille est mise à jour.

EDIT: InternalAdapter

Après quelques recherches, vous pouvez obtenir votre objet avec le InternalAdapter de votre TAdapterBindSource

Sur l'événement OnClick:

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

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

ma classe a encore d'autres fonctions travailler sur des pressions de bouton. Par exemple quand je veux mettre à jour mes objets dans ma base de données. J'ai créé une fonction de mise à jour dans ma classe TDog, qui sauvegarde les valeurs de propriétés actuelles dans la base de données. J'ai donc besoin au minimum d'un moyen d'accéder à l'objet en surbrillance. –

+1

Ok, après quelques recherches, vous devez utiliser le InternalAdapter de votre TAdapterBindSource. Par conséquent, sur le bouton OnClick: procédure TForm8.Button1Click (Sender: TObject); var Adaptateur: TBindSourceAdapter; begin Adaptateur: = AdapterBindSource1.InternalAdapter; CurrentDog: = TDog (Adapter.Current); fin; –

+0

Merci, après mon retour à la maison, je vais essayer de mettre en œuvre cela et voir si cela fonctionne. –