IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

InfoPath .NET Discussion :

Obtenir l'index de la ligne courante dans une repeating table


Sujet :

InfoPath .NET

  1. #1
    Membre expert

    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    1 581
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 581
    Points : 3 016
    Points
    3 016
    Par défaut Obtenir l'index de la ligne courante dans une repeating table
    Salut,

    Je fais face à un problème basique mais je ne vois pas où je peux récupérer l'info.

    J'ai une repeating table avec deux champs dont l'un est une liste. J'ai ajouté un changed_event sur la liste, je récupère facilement la valeur sélectionnée via le e.NewValue. L'argument "e" ne contient malheureusement aucune info concernant la ligne courante or je voudrais tout simplement récupérer la valeur du champ qui se trouve à côté de ma liste.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if(!e.UndoRedo && e.NewValue != "")
    {
       //e.NewValue contient la valeur de la liste pour la ligne courante                             
        // MainDataSource.CreateNavigator().SelectSingleNode("/my:myFields/my:ExpenseDetail/my:LocalAmount", NamespaceManager).Value);
                } => ça c'est pas bon car ça récupère la valeur du champ de la 1ère ligne or j'ai besoin de celui de la ligne courante
    ...
    Une idée?

    Merci

  2. #2
    Membre expert

    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    1 581
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 581
    Points : 3 016
    Points
    3 016
    Par défaut
    Bon,

    J'ai trouvé une astuce même si je trouve ça pourri mais bon, en attendant ça peut dépanner.

    On peut créer une rule sur la liste qui met à jour un champ en utilisant la fonction "current()" d'infopath, donc comme ceci

    current()/...xpath expression

    Si quelqu'un a mieux je suis preneur. En gros j'aimerais récupérer l'index que la fonction "current()" renvoie dans mon code csharp directement. D'ailleurs, y a-il moyen d'utiliser ces fonctions dans son code?

  3. #3
    Membre expert

    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    1 581
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 581
    Points : 3 016
    Points
    3 016
    Par défaut
    Bon c'est pas bon non plus cette méthode car elle ne permet que de lire une donnée de la ligne courante mais ne renvoie pas son numéro or j'ai également besoin de mettre à jour une cellule de ce même ligne.

  4. #4
    Membre expérimenté
    Avatar de virgul
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 625
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 625
    Points : 1 666
    Points
    1 666
    Par défaut
    Salut,

    oui current() est utile mais pour tout ce qui est des expressions XPath a l'intérieur d'Infopath (en mode design). Par contre, je sais pas si dans 2007 mais dans 2003 tu peux faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    e.Source.parentNode
    (a voir dans 2007 y ont enlevé l'étage source)
    ou alors faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    selectsinglenode("../../ID")
    Si c'est un attribut c'est un peu plus compliqué il faut d'abord faire .parentnode puis revenir sur attribut (et pas sa valeur comme au début) puis ("../") pour redescendre.

    ++
    Thierry

  5. #5
    Membre expert

    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    1 581
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 581
    Points : 3 016
    Points
    3 016
    Par défaut
    Source n'existe plus. Par contre pour l'histoire de l'ID, je vois pas du tout où tu veux en venir?



    je ne vois pas le lien entre un pseudo attribut ID (que je n'ai pas défini) et mon évènement ...changed de ma liste qui ne me fournit que l'argument "e" qui ne me permet précisémment pas de pointer sur l'élément courant.

    Tu pourrais me fournir un exemple?

  6. #6
    Membre expérimenté
    Avatar de virgul
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 625
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 625
    Points : 1 666
    Points
    1 666
    Par défaut
    ID n'a rien à voir la dedans

    ce que j'essayais de faire comprendre c'est que tu peux revenir à l'élément parent en utilisant ../ et ainsi attrapé l'élément que tu veux. Dans mon exemple j'ai symbolisé ton noeud par ID...

    donc si tu veux revenir de un niveau ../tonnoeud, de 2 niveau ../../tonnoeud et ainsi de suite.

    et pour la finte de l'attribut relis mon autre post...

    Et la méthode .parentnode ca existe plus?

    ++

    Thierry

  7. #7
    Membre expert

    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    1 581
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 581
    Points : 3 016
    Points
    3 016
    Par défaut
    Citation Envoyé par virgul
    ID n'a rien à voir la dedans

    ce que j'essayais de faire comprendre c'est que tu peux revenir à l'élément parent en utilisant ../ et ainsi attrapé l'élément que tu veux. Dans mon exemple j'ai symbolisé ton noeud par ID...

    donc si tu veux revenir de un niveau ../tonnoeud, de 2 niveau ../../tonnoeud et ainsi de suite.

    et pour la finte de l'attribut relis mon autre post...

    Et la méthode .parentnode ca existe plus?

    ++

    Thierry
    Oui je connais bien le XML donc je sais que ../ permet de remonter au parent et ainsi de suite mais ça ne m'aide pas pour le cas présent puisque je ne reçois que "e" en argument et "e" ne représente pas un noeud XML donc je ne peux pas pointer vers son parent et ensuite redescendre vers l'un de ses "collègues" enfants

    Ou alors, faudrait que tu m'expliques

  8. #8
    Membre expert

    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    1 581
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 581
    Points : 3 016
    Points
    3 016
    Par défaut
    Bon, j'ai enfin trouvé une solution. J'avais déjà un workaround mais que je n'aimais pas trop car quelque peu tordu. A toutes fins utiles (sans doute à inclure dans la FAQ infopath), voici comment j'ai fait

    Problématique

    sur le changed event d'un contrôle situé dans une table répétitive, on récupère l'argument "e". Ce que je voulais faire c'était récupérer la valeur d'un champ se trouvant dans la même ligne que celui sur lequel l'event se produit. Je voulais également assigner une valeur à un autre champ de cette même ligne.

    Il faut faire comme ceci: (y a peut-être d'autres méthodes mais en tous cas celle-ci fonctionne)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    XPathNodeIterator NodeIterator = e.Site.SelectAncestors(XPathNodeType.Element, false);  //pointer sur le container
    NodeIterator.MoveNext(); //Pointer sur la ligne courante
    NodeIterator.Current.SelectSingleNode("my:lacolonne",NamespaceManager).Value // récupération de la valeur de la colonne de la ligne courante

    J'ai essayé une requête directe avec selectancestors en donnant directement le nom de l'ancêtre mais ça ne fonctionne pas. Je susi obligé de passer en deux étapes mais bon, au moins ça reste propre et ça fonctionne.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] obtenir une valeur de la ligne courante dans BindingSource
    Par minosys dans le forum VB.NET
    Réponses: 2
    Dernier message: 06/09/2014, 21h13
  2. Réponses: 3
    Dernier message: 06/09/2012, 16h23
  3. [C# 2.0]Récupérer la ligne courante dans une richtextbox
    Par nephhh dans le forum Windows Forms
    Réponses: 2
    Dernier message: 23/02/2009, 22h07
  4. Supprimer la ligne courante dans un ficher
    Par bazdik dans le forum Langage
    Réponses: 1
    Dernier message: 16/05/2007, 18h29
  5. somme dans une repeating table
    Par ecirb dans le forum InfoPath
    Réponses: 3
    Dernier message: 19/03/2007, 14h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo