PC SOFT

DOCUMENTATION EN LIGNE
DE WINDEV, WEBDEV ET WINDEV MOBILE

PV

  • Présentation
  • Comment créer une colonne de table de type Conteneur ?
  • Les différentes étapes
  • Champ principal d'une colonne Conteneur
  • Limitations
  • Utilisation d'une colonne de type Conteneur
  • Table fichier ou table sur source
  • Table mémoire
  • 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/iPadApple WatchUniversal Windows 10 AppWindows Mobile
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,
  • Versions 16 et supérieures
    WINDEV champ Graphe,
    Nouveauté 16
    WINDEV champ Graphe,
    WINDEV champ Graphe,
  • Versions 16 et supérieures
    WINDEV champ Table,
    Nouveauté 16
    WINDEV champ Table,
    WINDEV champ Table,
  • Versions 16 et supérieures
    WINDEV champ Fenêtre interne,
    Nouveauté 16
    WINDEV champ Fenêtre interne,
    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), ...
Versions 16 et supérieures
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.
Nouveauté 16
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.
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.
Versions 15 et supérieures
WINDEVJava Les colonnes de table de type conteneur sont disponibles en Java.
Nouveauté 15
WINDEVJava Les colonnes de table de type conteneur sont disponibles en Java.
WINDEVJava Les colonnes de table de type conteneur sont disponibles en Java.
Versions 17 et supérieures
WINDEV Les colonnes de type Conteneur sont disponibles pour les champs Table hiérarchique.
Nouveauté 17
WINDEV Les colonnes de type Conteneur sont disponibles pour les champs Table hiérarchique.
WINDEV Les colonnes de type Conteneur sont disponibles pour les champs Table hiérarchique.
WINDEVWEBDEV - Code Serveur Les colonnes de type Conteneur sont disponibles pour les champs Table hiérarchique.
Versions 20 et supérieures
WEBDEV - Code Serveur Les colonnes de table de type Conteneur sont disponibles dans les sites WEBDEV (en Windows et Linux).
Nouveauté 20
WEBDEV - Code Serveur Les colonnes de table de type Conteneur sont disponibles dans les sites WEBDEV (en Windows et Linux).
WEBDEV - Code Serveur Les colonnes de table de type Conteneur sont disponibles dans les sites WEBDEV (en Windows et Linux).
Comment créer une colonne de table de type Conteneur ?

Les différentes étapes

Pour créer une colonne de table de type Conteneur :
  1. Créez si nécessaire une table (fichier, mémoire ou sur source).
  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 l'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.
  • Versions 16 et supérieures
    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, ...
    Nouveauté 16
    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 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 "IHM" de le 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

Table fichier ou table sur source

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.

Table mémoire

Un champ Table mémoire 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 mémoire.
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 à une 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
Remarque : Pour un champ Table fichier, il est conseillé de manipuler les champs d'une colonne Conteneur dans le traitement "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.
Versions 20 et supérieures
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 Navigateur),
  • Champ Lien social (non disponible dans les champs Table Ajax ou Navigateur).
Nouveauté 20
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 Navigateur),
  • Champ Lien social (non disponible dans les champs Table Ajax ou Navigateur).
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 Navigateur),
  • Champ Lien social (non disponible dans les champs Table 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