4D v16.3

Gestion des List box hiérarchiques

Accueil

 
4D v16.3
Gestion des List box hiérarchiques

Gestion des List box hiérarchiques  


 

 

4D vous permet de définir et d’utiliser des list box hiérarchiques. Une list box hiérarchique est une list box dans laquelle le contenu de la première colonne apparaît sous forme hiérarchique. Ce type de représentation est adapté à la présentation d’informations comportant des valeurs répétées et/ou hiérarchiquement dépendantes (pays/région/ville...).

Seules les list box de type tableau peuvent être hiérarchiques. 

Les list box hiérarchiques constituent un mode de représentation particulier des données, mais ne modifient pas la structure de ces données (les tableaux). Les list box hiérarchiques sont remplies et gérées exactement de la même manière que les list box non hiérarchiques (cf. Gestion programmée des objets de type List box).

Pour définir une list box hiérarchique, vous disposez des possibilités suivantes :

  • configurer manuellement les éléments hiérarchiques via la Liste des propriétés ou à l’aide du pop up menu de gestion des list box, dans l’éditeur de formulaires. Ces points sont traités dans le manuel Mode Développement de 4D.
  • utiliser les commandes LISTBOX FIXER HIERARCHIE et LISTBOX LIRE HIERARCHIE.

A la première ouverture d’un formulaire contenant une list box hiérarchique, par défaut toutes les lignes sont déployées.
Une ligne de rupture et un "noeud" hiérarchique sont automatiquement ajoutés dans la list box lorsque des valeurs sont répétées dans les tableaux. Par exemple, imaginons une list box contenant quatre tableaux définissant des villes, chaque ville étant caractérisée par un pays, une région, un nom et un nombre d’habitants :

Si cette list box est affichée sous forme hiérarchique (les trois premiers tableaux étant inclus dans la hiérarchie), vous obtenez :

Les tableaux ne sont pas triés avant la construction de la hiérarchie. Si par exemple un tableau contient les données AAABBAACC, la hiérarchie obtenue sera :

> A
> B
> A
> C

Pour déployer ou contracter un "noeud" hiérarchique, cliquez dessus. Si vous effectuez Alt+clic (Windows) ou Option+clic (Mac OS) sur le noeud, tous ses sous-éléments seront déployés ou contractés. Ces opérations peuvent également être effectuées par programmation à l'aide des commandes LISTBOX DEPLOYER et LISTBOX CONTRACTER.

Une list box hiérarchique affiche un nombre variable de lignes à l’écran en fonction de l’état déployé/contracté des noeuds hiérachiques. Cela ne signifie pas pour autant que le nombre de lignes des tableaux varie. Seul l’affichage est modifié, pas les données.

Il est important de comprendre ce principe car la gestion programmée des list box hiérarchiques se base toujours sur les données des tableaux, pas sur les données affichées. En particulier, les lignes de rupture ajoutées automatiquement ne sont pas prises en compte dans les tableaux d’options d’affichage (cf. ci-dessous le paragraphe ).

Examinons par exemple les tableaux suivants :

Si ces tableaux sont représentés hiérarchiquement, la ligne "Quimper" ne sera pas affichée sur la deuxième ligne mais sur la quatrième, à cause des deux lignes de rupture ajoutées :

Quelle que soit la manière dont les données sont affichées dans la list box (hiérarchique ou non-hiérarchique), si vous souhaitez passer la ligne contenant "Quimper" en gras, vous devrez utiliser l’instruction TabStyle{2} = Gras. Seule la position de la ligne dans les tableaux est prise en compte. 

Ce principe est mis en oeuvre pour les tableaux internes permettant de gérer :

  • les couleurs
  • les couleurs de fond
  • les styles
  • les lignes masquées
  • les sélections

Par exemple, si vous voulez sélectionner la ligne contenant Rennes, vous devez passer :

 ->MaListbox{3}:=Vrai

Représentation non hiérarchique :

Représentation hiérarchique :

Note : Si une ou plusieurs lignes sont masquées du fait que leurs parents ont été contractés, elles ne sont plus sélectionnées. Seules les lignes visibles (directement ou suite à un défilement) sont sélectionnables. Autrement dit, les lignes ne peuvent pas être à la fois sélectionnées et cachées. 

Tout comme pour les sélections, la commande LISTBOX LIRE POSITION CELLULE retournera les mêmes valeurs pour une list box hiérarchique et une list box non hiérarchique. Cela signifie que dans les deux exemples ci-dessous, LISTBOX LIRE POSITION CELLULE retournera la même position : (3;2)

Représentation non hiérarchique :

Représentation hiérarchique :

Si l’utilisateur sélectionne une ligne de rupture, LISTBOX LIRE POSITION CELLULE retourne la première occurrence de la ligne dans le tableau correspondant. Dans le cas suivant : 

... LISTBOX LIRE POSITION CELLULE retourne (2;4). Pour sélectionner une ligne de rupture par programmation, vous devez utiliser la commande LISTBOX SELECTIONNER RUPTURE.

Les lignes de rupture ne sont pas prises en compte dans les tableaux internes permettant de gérer l’apparence graphique des list box (styles et couleurs). Il est toutefois possible de modifier ces caractéristiques pour les lignes de rupture via les commandes de gestion graphique des objets (thème Objets (Formulaires)). Il suffit pour cela d’exécuter ces commandes appropriées sur les tableaux constituant la hiérarchie. 

Soit par exemple la list box suivante (les noms des tableaux associés sont précisés entre parenthèses) : 

Représentation non hiérarchique :

Représentation hiérarchique :

En mode hiérarchique, les niveaux de rupture ne sont pas pris en compte par les tableaux de modification de style nommés tStyle et tCouleurs. Pour modifier la couleur ou le style des niveaux de rupture, vous devez exécuter les instructions suivantes :

 OBJET FIXER COULEURS RVB(T1;0x0000FF;0xB0B0B0)
 OBJET FIXER STYLE POLICE(T2;Gras)

Note : Dans ce contexte, seule la syntaxe utilisant la variable tableau peut fonctionner avec les commandes de propriété d’objet car les tableaux n’ont alors pas d’objet associé. 

Résultat :

Lorsque toutes les lignes d’une sous-hiérarchie sont masquées, la ligne de rupture est automatiquement masquée. Dans l’exemple ci-dessus, si les lignes 1 à 3 sont masquées, la ligne de rupture "Bretagne" n’apparaîtra pas.

Vous pouvez optimiser l’affichage et la gestion des list box hiérarchiques en tirant parti des événements formulaire Sur déployer et Sur contracter

Une list box hiérarchique est construite à partir du contenu des tableaux qui la constituent, elle ne peut donc être affichée que lorsque tous les tableaux sont chargés en mémoire. Ce principe peut rendre difficile la génération de list box hiérarchiques de grande taille basées sur des tableaux générés à partir des données (via la commande SELECTION VERS TABLEAU), pour des raisons de rapidité d’affichage et d’utilisation de la mémoire.

L'emploi des événements formulaire Sur déployer et Sur contracter permet de s’affranchir de ces contraintes : il est possible de n’afficher qu’une partie de la hiérarchie et d’effectuer le chargement et le déchargement des tableaux à la volée, en fonction des actions de l’utilisateur. 

Dans le contexte de ces événements, la commande LISTBOX LIRE POSITION CELLULE retourne la cellule sur laquelle l’utilisateur a cliqué afin de déployer ou de contracter une ligne. 

Dans ce cas, le remplissage et le vidage des tableaux doivent être effectués par le code. Les principes à mettre en oeuvre sont :

  • A l’affichage de la listbox, seul le premier tableau doit être rempli. Vous devez toutefois créer un second tableau avec des valeurs vides afin que la list box affiche les boutons déployer/contracter :
  • Lorsque l’utilisateur clique sur un bouton de déploiement, vous pouvez traiter l’événement Sur déployer. La commande LISTBOX LIRE POSITION CELLULE retourne la cellule concernée et vous permet de construire la hiérarchie adéquate : vous alimentez le premier tableau avec des valeurs répétées et le second avec les valeurs issues de la commande SELECTION VERS TABLEAU, et vous insérez dans la list box autant de lignes que nécessaire à l’aide de la commande LISTBOX INSERER LIGNES.
  • Lorsque l’utilisateur clique sur un bouton de contraction, vous pouvez traiter l’événement Sur contracter. La commande LISTBOX LIRE POSITION CELLULE retourne la cellule concernée : vous supprimez de la list box autant de lignes que nécessaire à l’aide de la commande LISTBOX SUPPRIMER LIGNES.



Voir aussi  

Gestion programmée des objets de type List box
LISTBOX FIXER HIERARCHIE
LISTBOX LIRE HIERARCHIE
LISTBOX SELECTIONNER RUPTURE

 
PROPRIÉTÉS 

Produit : 4D
Thème : List Box
Nom intl. : Managing Hierarchical List Boxes

 
HISTORIQUE 

 
UTILISATION DE L'ARTICLE

4D - Langage ( 4D v16)
4D - Langage ( 4D v16.1)
4D - Langage ( 4D v16.2)
4D - Langage ( 4D v16.3)