PC SOFT

DOCUMENTATION EN LIGNE
DE WINDEVWEBDEV ET WINDEV MOBILE

  • Présentation
  • Comment créer une colonne d'un champ Table de type Conteneur ?
  • Les différentes étapes
  • Champ principal d'une colonne Conteneur
  • Limitations
  • Utilisation d'une colonne de type Conteneur
  • Champ Table fichier ou champ Table sur variable
  • Champ Table par programmation
  • Manipuler les champs de la colonne Conteneur
  • Limite : Type de champs non disponibles
WINDEV
WindowsLinuxUniversal Windows 10 AppJavaEtats et RequêtesCode Utilisateur (MCU)
WEBDEV
WindowsLinuxPHPWEBDEV - Code Navigateur
WINDEV Mobile
AndroidWidget AndroidiPhone/iPadWidget IOSApple WatchMac CatalystUniversal Windows 10 App
Autres
Procédures stockées
Présentation
Une cellule de table peut contenir un ensemble de champs. De nombreux types de champs peuvent être inclus dans une colonne Conteneur :
  • champ Libellé,
  • champ de saisie,
  • champ Image,
  • champ Bouton,
  • WINDEV champ Graphe,
  • WINDEV champ Table,
  • WINDEV champ Fenêtre interne,
  • ...
Il est possible de définir un champ principal pour la cellule. Ce champ sera celui utilisé par exemple :
  • pour les ajouts réalisés par programmation,
  • pour les tris,
  • pour la liaison avec les données (liaison avec une rubrique ou avec une variable), ...
WINDEV Grâce aux fenêtres internes, tous les champs de la colonne conteneur peuvent avoir un contenu différent pour chaque ligne du champ Table.
WINDEVWEBDEV - Code Serveur Les colonnes de type Conteneur sont disponibles pour les champs Table hiérarchique.
Comment créer une colonne d'un champ Table de type Conteneur ?

Les différentes étapes

Pour créer une colonne d'un champ Table de type Conteneur :
  1. Créez si nécessaire un champ Table (Table fichier, Table par programmation ou Table sur variable).
  2. Créez une colonne de type Conteneur (soit par le menu contextuel du champ Table, soit depuis la fenêtre de description du champ Table).
  3. Agrandissez si nécessaire la hauteur des lignes du champ Table avec la souris.
  4. Positionnez les champs voulus dans la cellule Conteneur de la première ligne du champ Table. Il est possible de :
    • déplacer des champs existants dans la fenêtre vers la colonne Conteneur.
    • faire un glisser/déplacer des rubriques de l'analyse affichée dans le volet "Explorateur de projet".
  5. Dans la description de la colonne Conteneur, indiquez si nécessaire le champ principal de la colonne (onglet "Général") et validez.

Champ principal d'une colonne Conteneur

Le champ principal d'une colonne Conteneur correspond au champ manipulé par défaut dans la colonne. Par exemple :
  • Le tri de la colonne Conteneur sera réalisé sur le champ principal.
  • Les recherches réalisées dans une colonne Conteneur seront réalisées sur le champ principal.
  • Les ajouts, modifications, ... réalisés par programmation : la valeur de la colonne indiquée par exemple dans la fonction TableAjouteLigne sera affectée au champ principal.
  • Les exports réalisés à partir du champ Table (exports vers Excel, Open Office, Word, ...) prendront en compte la valeur du champ principal de la colonne.
  • Si la colonne de type Conteneur est liée à un fichier de données ou à une variable, le champ effectivement lié sera le champ principal.
La définition d'un champ principal dans une colonne de type Conteneur n'est pas obligatoire.

Limitations

  • WINDEV Dans les colonnes de type Conteneur, les champs Interrupteur doivent être affectés avec une chaîne au format "<Vrai/Faux>;<Vrai/Faux>;<Vrai/Faux>...".
    De la même façon, la valeur renvoyée par ces champs Interrupteur est une chaîne au format "<Vrai/Faux>;<Vrai/Faux>;<Vrai/Faux>...".
  • Il n'est pas possible de personnaliser le libellé des options des champs Sélecteur et Interrupteur pour chaque ligne dans une colonne de type Conteneur.
  • WINDEV Pour utiliser un champ avec une valeur différente à chaque ligne dans une colonne de type Conteneur, il suffit de mettre ce champ dans une fenêtre interne et d'insérer un champ fenêtre interne dans la colonne. Cette astuce peut être utilisée par exemple pour les champs de type Sélecteur, Interrupteur, ...
WINDEV Remarques : Fenêtre interne, champ Graphe et champ Table dans une colonne de type Conteneur :
  • Décochez l'option "Contenu identique pour toutes les lignes" (onglet "UI" de la fenêtre de description du champ) afin d'obtenir un affichage différent à chaque ligne.
  • Les champs de la fenêtre interne, les champs Graphe et les champs Table doivent être alimentés par programmation.
Utilisation d'une colonne de type Conteneur

Champ Table fichier ou champ Table sur variable

Un champ Table fichier peut contenir une ou plusieurs colonnes de type Conteneur. Les champs de cette colonne Conteneur peuvent par exemple afficher les enregistrements du fichier de données.
Dans ce cas, le champ Table est lié au fichier de données.
Les champs présents dans la colonne de type Conteneur sont chacun liés à la rubrique correspondante.
Si un champ principal est défini sur le champ Table, il est conseillé de :
  • solution 1 : conserver la liaison du champ principal à la rubrique du fichier de données. La colonne Conteneur n'est liée à aucune rubrique.
  • solution 2 : lier la colonne Conteneur à la rubrique associée au champ principal et supprimer la liaison au niveau du champ.
Liste des exemples associés :
WD Découverte Lien base de données Exemples découverte (WINDEV) : WD Découverte Lien base de données
[ + ] Cet exemple est une application simplifiée de gestion de contacts.

Cet exemple montre :
- le remplissage d'un champ Table à partir d'un fichier de données,
- le remplissage d'un champ Zone répétée à partir d'une requête SQL,
- la création d'un formulaire.

Champ Table par programmation

Un champ Table par programmation peut contenir une ou plusieurs colonnes de type Conteneur. Le champ principal de la colonne Conteneur sera directement manipulé par les fonctions de programmation du champ Table.
Par exemple, lors de l'ajout d'une ligne avec la fonction TableAjouteLigne, seul le champ principal de la colonne sera affecté avec la valeur définie par la colonne. Si plusieurs champs doivent être initialisés dans la colonne, il est nécessaire d'utiliser la syntaxe décrite dans le paragraphe suivant. Par exemple :
NumLigne est un entier
NumLigne = TableAjouteLigne(TABLE_Table2, "Moulain")
COL_Colonne1[NumLigne].SAI_Prenom = "Florence"

Manipuler les champs de la colonne Conteneur

Les champs d'une colonne Conteneur peuvent être manipulés grâce à la syntaxe suivante :
<Nom de la colonne>[<Numéro de Ligne>].<Nom du champ>
Quelques exemples :
  • Affectation d'une valeur à un champ :
    COL_Colonne1[NumLigne].SAI_Prenom = "Florence"
  • Affectation d'éléments à un champ Combo d'un conteneur :
    COL_Colonne1[NumLigne].COMBO_Combo1.Contenu = "Elément 1" + RC + "Elément 2"
  • Modification d'une propriété d'un champ :
    COL_Colonne1[NumLigne].PrixHT.Couleur = RougeClair
  • Indirection sur un champ se trouvant dans une colonne Conteneur :
    sNomChampDansColoneConteneur est une chaîne
    sNomChampDansColoneConteneur = "TABLE_AvecColConteneur.COL_Conteneur[" + ...
    nIndiceLigne + "].SAI_DansColConteneur"
    //ou
    //sNomChampDansColoneConteneur = "TABLE_AvecColConteneur[" + ...
    // nIndiceLigne + "].COL_Conteneur.SAI_DansColConteneur"
     
    Info({sNomChampDansColoneConteneur})
  • WINDEV Ajout d'une ligne dans un champ Table contenu dans une colonne Conteneur :
    TableAjouteLigne(TABLE_AVEC_INTEGREE[NumLigne].TABLE_Dans_Conteneur, ...
    "Contenu_Col1", "Contenu_Col2")
  • WINDEV Manipulation d'un champ Interrupteur inséré dans une fenêtre interne :
    TABLE_SansNom1[NumLigne].FI_SansNom1.INT_Interrupteur[Indice] = Vrai
  • WINDEV Changer la fenêtre interne contenue dans un champ Fenêtre interne d'une colonne Conteneur :
    // Charge la fenêtre interne FI_FenêtreInterne1, à la ligne NumLigne d'un champ Fenêtre interne
    // nommé CFI_ChampFenêtreInterne contenu dans une colonne de type conteneur d'un champ Table
    // Attention : le champ CFI_ChampFenêtreInterne doit avoir
    // l'option "contenu identique pour toutes les lignes" non cochée
    // (onglet "UI" de la fenêtre de description)
    ChangeFenêtreSource(TABLE_SansNom1[NumLigne].CFI_ChampFenêtreInterne, FI_FenêtreInterne1)
Remarque : Pour un champ Table fichier, il est conseillé de manipuler les champs d'une colonne Conteneur dans l'événement "Affichage d'une ligne".
Limite : Type de champs non disponibles
WINDEV Dans une colonne de type Conteneur, tous les champs peuvent être utilisés, soit directement, soit via une fenêtre interne.
WEBDEV - Code Serveur Dans une colonne de type Conteneur, seuls les champs suivants peuvent être utilisés :
  • Champ Zone de Texte Riche,
  • Champ Libellé simple,
  • Champ d'affichage formaté,
  • Champ Lien,
  • Champ Bouton,
  • Champ Image,
  • Champ de saisie,
  • Champ Combo,
  • Champ Sélecteur,
  • Champ Interrupteur,
  • Champ Liste,
  • Champ Calendrier,
  • Champ Notation,
  • Champ Potentiomètre,
  • Champ Code-Barre (non disponible dans les champs Table en mode navigateur),
  • Champ Lien social (non disponible dans les champs Table en mode Ajax ou Navigateur).
Version minimum requise
  • Version 14
Documentation également disponible pour…
Commentaires
Contourner la limitation sur les champs Interrupteur
malgré la limitation, il est possible de placer tout de même des champs de type interrupteur :
en fait, si je veux 3 cases à cocher, je crée 3 interrupteurs à 1 option, au lieu d'1 interrupteur à 3 options.
Je peux alors gérer chaque interrupteur sans préciser de n° d'option, en donnant juste le nom de l'interrupteur, et en vérifiant son état à vrai ou faux.

Exemple :
- une table nommée TABLE_Exemple, avec COLONNE_1 de type conteneur
- j'y place 3 interrupteurs, nommés CHK_1, CHK_2 et CHK_3
- chaque interrupteur ne comporte qu'une option (1 case)

je peux alors taper par programmation :
NumLigne est un entier

NumLigne = TableSelect(TABLE_Exemple)
si TABLE_Exemple.COLONNE_1[NumLigne].CHK_1 = vrai ALORS
info("Ligne " + NumLigne + " : Interrupteur 1 coché")
FIN

si TABLE_Exemple.COLONNE_1[NumLigne].CHK_2 = vrai ALORS
info("Ligne " + NumLigne + " : Interrupteur 2 coché")
FIN

si TABLE_Exemple.COLONNE_1[NumLigne].CHK_3 = vrai ALORS
info("Ligne " + NumLigne + " : Interrupteur 3 coché")
FIN

(cette astuce est également utilisable sur les zones répétées)


Fabrice
29 jan. 2010