|
FORUMS PROFESSIONNELS WINDEV, WEBDEV et WINDEV Mobile |
| | | | | |
| Ajouter information pour les lignes affichées d'une table |
| Débuté par Aziz Tnani, 14 déc. 2025 11:24 - 10 réponses |
| |
| | | |
|
| |
Membre enregistré 40 messages |
|
| Posté le 14 décembre 2025 - 11:24 |
Je sais que le sujet a dû être traité par ailleurs mais de toutes les réponses que je trouve, aucune ne répond vraiment.
J'exécute le code suivant dans l'évènement "Affichage d'une ligne de table"
HLitRechercheDernier(ActiviteBien, IDBien, COL_IDProduit) SI HTrouve(ActiviteBien) ALORS COL_DateActivité=ActiviteBien.DateActivite COL_DerniereActivité=ActiviteBien.Observations FIN
Mais quand j'affiche cette table, il semble que le code est lancé pour toutes les lignes de la table, même celles qui ne sont pas visibles, y a t-il un moyen de ne le faire que pour les lignes visibles seulement. |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 4 325 messages |
|
| Posté le 14 décembre 2025 - 14:59 |
Bonjour, Il suffit de tester si la ligne est visible
-- Il y a peut être plus simple, mais, ça tourne Quand tout a échoué, utilise l'option RTFM |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 40 messages |
|
| Posté le 14 décembre 2025 - 22:37 |
Comment tu teste la ligne en cours ? Tu fais ça avec ça ??
NomTable[NomTable]..visible |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 1 021 messages |
|
| Posté le 14 décembre 2025 - 23:37 |
Bonjour, je ne suis pas certain que le ..visible donne le bon résultat. Que se passe t'il si vous placez le code ci-dessous dans l'évènement "Affichage d'une ligne ..." ?
Trace(NomTable[IndiceEnCours])
Normalement, seul l'indice des lignes affichées devrait apparaitre (tant que vous ne manipulez pas l'ascenseur). Cdlt |
| |
| |
| | | |
|
| | |
| |
| Posté le 15 décembre 2025 - 08:11 |
Le truc est de connaitre la condition qui rend la ligne visible ou pas dans la table. Pourquoi certaine ligne ne s'affiche pas dans la table ? ensuite, une fois qu'on a cette condition, alors on pourra rajouter du code pour eviter la lecture H pour chaque ligne Mais peut-être est-il possible de résoudre le probleme en amont, et créer une requête éfficace qui gerera le processus complet en 1 seul fois. |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 40 messages |
|
| Posté le 22 décembre 2025 - 21:58 |
Merci à tous pour vos retours Je crois que je me suis mal expliqué, je parle de table fichier ou requête qui affiche 22 lignes par exemple sur un total de 1000 et quelques lignes Je veux exécuter une requête pour calculer et afficher des colonnes supplémentaires par programmation, mais je ne veux pas que le programme calcule pour toutes les lignes de la table mais seulement pour les 22 lignes affichées de la table. Quand l'utilisateur monte ou descend avec l'ascenseur vertical, que les colonnes soient calculées et affichées pour les nouvelles lignes affichées.. J'espère que c'est plus clair |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 4 325 messages |
|
| Posté le 22 décembre 2025 - 22:38 |
Bonjour, Une idée est d'utiliser une requête LIMIT/OFFSET (avec l'offset qui correspond au nombre d ligne de la table). Le déplacement sera fait non pas avec un ascensent mais avec des bouton Haut/Bas
-- Il y a peut être plus simple, mais, ça tourne Quand tout a échoué, utilise l'option RTFM |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 40 messages |
|
| Posté le 25 décembre 2025 - 15:59 |
Ce que tu proposes c'est que je change la requête qui remplis la table (alors que ce n'est pas celle qui pose problème) Par contre si je comprends bien ta solution c'est que je désactive l'ascenseur de la table et que je remplace ça par deux boutons haut / bas pour détecter quand on affiche plus de lignes, de calculer les colonnes qui vont bien, sans calculer pour l'ensemble des lignes de la table En théorie ça devrait marcher, deux questions : Comment savoir le nombre de lignes visibles? dans la table? Comment faire de sorte que le fait de monter et descendre dans la table avec la molette de la souris fonctionne aussi?
Ce que je ne comprends pas c'est que je sois le seul à avoir ce genre de soucis... Joyeux Noël |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 1 021 messages |
|
| Posté le 25 décembre 2025 - 16:14 |
bonjour, Vous n'avez pas répondu, Que se passe t'il si vous placez le code ci-dessous dans l'évènement "Affichage d'une ligne ..." ?
Trace(IndiceEnCours)
Pour moi, seuls les indices affichés dans la table apparaissent dans le trace et donc, pour votre cas, la requête ne devrait être exécutée que pour ces lignes, puis exécutée lors de la manipulation de l'ascenseur . CdltMessage modifié, 25 décembre 2025 - 16:15 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 4 325 messages |
|
| Posté le 26 décembre 2025 - 06:40 |
Aziz Tnani a écrit :
Ce que tu proposes c'est que je change la requête qui remplis la table
C'est cela
Par contre si je comprends bien ta solution c'est que je désactive l'ascenseur de la table et que je remplace ça par deux boutons haut / bas pour détecter quand on affiche plus de lignes, de calculer les colonnes qui vont bien, sans calculer pour l'ensemble des lignes de la table
En effet, d'autant plus que WINDEV propose des fonctions de calcul automatique (Somme, Moyenne, Compteur, Min, Max) pour les colonnes (propriété/Détail de la colonne) et la Programmation de calculs personnalisés dans les champs Table https://doc.pcsoft.fr/fr-FR/?1013331&name=programmation_calculs_personnalises_dans_les_champs_table
En théorie ça devrait marcher, deux questions :
En pratique aussi
Comment savoir le nombre de lignes visibles? dans la table?
TableOccurence(TABLE_MaTable,toVisible)
Comment faire de sorte que le fait de monter et descendre dans la table avec la molette de la souris fonctionne aussi?
Il suffit d'ajouter l'évènement Molette Souris (WM_MOUSEWHEEL) dans le code du champ table via Ajouter d'autres évènements au champ table (en bleu tout en bas du code,) et d'intercepter le sens d'utilisation via _EVE.wParam. Si _EVE.wParam.est positif la molette est déplacée vers le haut, vers le bas sinon.
Cadeau de Noël : J'utilise une table Individu classique (PK,Nom,Prénom,Naissance ...) REQ_Individu_Paginé
SELECT Individu.PK_Individu AS PK_Individu, Individu.PrénomIndivide AS Prénom, Individu.NDX_NomIndividu AS Nom, DATEDIFF(yy,Individu.NDX_DateNaissance ,SYSDATE ) AS Age FROM Individu
LIMIT {pOffset}, {pNbLignes} Si l'on veut une portabilité, on peut effectuer le calcul dans la requête via les fonctions d'agrégation. On peut aussi créer l'ordre de tri dans la requête. Attention, dans ce cas, c'est l'ordre d'affichage du champ table qui prime REQ_NbIndividus
SELECT COUNT(Individu.PK_Individu) AS NbIndividus FROM Individu
Code du champ table
Procedure FEN_Individu() gnOffsetCourant est un entier Fin d'initialisation
InitTable(0) Changement de taille(WM_SIZE) à ajouter via "Ajouter d'autres évènements)
AfficheTable(gnOffsetCourant)
Code du champ table Roulette souris
SELON _EVE.wParam>0 CAS >0 Précédent() CAS<0 Suivant() FIN
Code clic bouton Précédent
Précédent()
Code clic bouton Suivant
Suivant()
Fonctions et procédures annexes
Procedure PRIVÉE ActiverDéplacement() <BLOC Traitement Bouton Précédent> SI gnOffsetCourant=0 ALORS BTN_Précédent..Etat=Grisé SINON BTN_Précédent..Etat=Actif FIN <FIN>
<BLOC Traitement Bouton Suivant> SI gnOffsetCourant=CalculeOffsetMax() ALORS BTN_Suivant..Etat=Grisé SINON BTN_Suivant..Etat=Actif FIN <FIN>
Procedure PRIVÉE AfficheTable(nOffset est entier)
REQ_Individu_Paginé.pOffset = nOffset REQ_Individu_Paginé.pNbLignes = TableOccurrence(TABLE_Individu,toVisible) TableAffiche(TABLE_Individu,taRéExécuteRequete)
FONCTION PRIVÉE CalculeOffsetMax() : entier
HExécuteRequête(REQ_NbIndividu) RENVOYER REQ_NbIndividu.NbIndividus-TableOccurrence(TABLE_Individu,toVisible)
Procedure InitTable(nOffset est entier)
AfficheTable(nOffset) ActiverDéplacement()
Procedure Précédent()
gnOffsetCourant SI gnOffsetCourant>=0 InitTable(gnOffsetCourant) SINON gnOffsetCourant++ FIN
Procedure Suivant()
gnOffsetCourant++ SI gnVersionTable=CalculeOffsetMax() ALORS gnOffsetCourant SINON InitTable(gnOffsetCourant) FIN
-- Il y a peut être plus simple, mais, ça tourne Quand tout a échoué, utilise l'option RTFM |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 40 messages |
|
| Posté le 26 décembre 2025 - 12:41 |
wow, merci pour le cadeau, j'essaie tout ça de suite ça c'est du cadeau |
| |
| |
| | | |
|
| | | | |
| | |
| | |
| |
|
|
|