Home

Tutoriel AppleScript Studio

Partie 2 - Gestion des tableaux

Etape 3 - Sélection d'une rangée d'un tableau

Commun Tiger & Léopard


Nous venons de créer le tableau avec quatre auteurs.



Nous allons sélectionner un auteur et le visualiser. Plus tard, ce nom d'auteur servira pour appeler la fenêtre de la liste des titres d'un auteur. Pour le moment, contentons-nous de visualiser ce nom dans un dialogue, comme ceci.




Le script complet


En téléchargement le script se trouve dans Data Source - Insertion de données dans un tableau.



on clicked theObject -----------------------------------------

-- Select an author used in main window
if the name of theObject is "AuthorTableView" then
set rowIndex to clicked row of theObject -- Integer, position of the selected row
if rowIndex is greater than 0 then
set currentDataSource to data source of theObject -- Result "data source id 5"
set theRow to data row rowIndex of currentDataSource -- Result data row id 9 of data source id 5"

set un_Author to contents of data cell "Author" of theRow -- The content
display dialog un_Author
end if
end if
--------------------------------------------------------------------------------------


Dans l'ordre, nous voyons :

  1. Que nous sommes dans l'analyse de l'événement "clicked ".
  2. Vérification de l'objet à traiter "AuthorTableView".
  3. Récupération du numéro de la rangée cliquée rowIndex (un nombre).
  4. Vérification valeur non nulle, cas du click en dehors des noms.
  5. Affectation de la Data Source à une variable locale currentDataSource (Résultat "data source id 5").
  6. Récupération de l'adresse de la rangée theRow (Résultat "data row id 9 of data source id 5".
  7. Récupération du nom de l'auteur un_Author (Résultat "Bellini...").
  8. Affichage de ce nom dans un dialogue display dialog .


Points clefs

Deux points clefs à bien comprendre.

Un, bien faire la différence de l'obtention d'une adresse d'un champ, et l'obtention du contenu. Pour obtenir le contenu, il faut le mot clef "contents " avec un "s".

Deux, ne pas oublier l'affectation de l'Action en cochant "clicked " pour le tableau, et l'affectation du script au tableau. Erreur classique, erreur classique, erreur classique, je ne le dirais jamais assez.





Parlons du piege

Rappel : C'est la Scrolling view qui est triée, pas les données elles-mêmes. Exemple : vous avez les données B,C,D initialement. Vous stocké A. La liste devient B,C,D,A, mais comme vous avez spécifié que la Data Source est triée, la scrolling view affiche bien A,B,C,D. Cela fait un peu bizarre, de spécifier une Data Source triée, et les données ne le sont pas, c'est sa visibilité qui l'est. Encore pire, si vous demandez la rangée 2 à la scrolling view vous obtenez bien B, mais si vous demandez la rangée 2 à la "Data Source", là vous parlez à la liste non triée, et vous obtenez C.



Impact sur les commandes

La commande que j'ai utilisée dans le script utilise data row, C'est la commande qui s'adresse directement aux données.

set theRow to data row rowIndex of currentDataSource

Cette commande a marché parfaitement puisqu’au chargement les données étaient triées.

Mais si vous ajoutez "Abbaco", un auteur peu connu, mais qui est avant tout le monde dans l'ordre alphabétique. Paf, vous tombez dans le piège. La bonne commande à utiliser sera :

set theRow to selected data row rowIndex of theObject

theObject étant la Table view, et sa Scrolling view.


Le bon script complet devient :




item 1 est obligatoire, car c'est une liste, prévue pour le cas où l'option "multiple selection" est choisie.

Je vous recommande fortement de manipuler le projet Data Source, en ajoutant, des données hors du tri, et de tester le résultat avec les deux commandes. La bonne compréhension de ce piège vous évitera de futurs déboires, que j'ai connus.




La suite - Suppression d'une rangée d'un tableau


Page précédente

Page suivante

Merci de votre visite

UP