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 :

Créer/Gérer/Supprimer un tableau de champ dynamiquement ?


Sujet :

InfoPath .NET

  1. #1
    Nouveau membre du Club
    Inscrit en
    Avril 2008
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 44
    Points : 31
    Points
    31
    Par défaut Créer/Gérer/Supprimer un tableau de champ dynamiquement ?
    Bonjour, je vais créer un sujet à part puisque je pense que mon problème diffère quand même de celui-çi
    http://www.developpez.net/forums/sho...4&postcount=19

    Néammoins avec cette solution je suis parvenu à çà:

    Ce qui est proche de ce que j'aimerais mais j'ai de nombreux problèmes
    Par exemple étant donné que l'on ajoute les éléments avec XCollectionInsert par copie, si je change de mois, ca mettra les 60 jours,si je veut effacer, il n'y a que XCollectionRemoveAll qui marche mais qui m'éfface également la collection 'que l'on copie', ce qui plante les futurs chargement de mois.

    Voilà donc ma question, est-ce que la méthode par insertion correspond ? puisque je ne peut (ne sait) pas par exemple comment résoudre les problèmes de suppression. Si oui comment faire
    Si non, je pense qu'il faudrai que je remplace ca par un tableau normal, auquel je rajoute des champs, en spécifiant le xpath à l'aide d'une boucle par exemple. Mais ca je ne sait pas si c'est possible.
    Ou autre chose ?_?

    Voilà merci à ceux qui sauraient m'éclaircir les idées
    Cordialement,
    Fred

  2. #2
    Membre éprouvé
    Homme Profil pro
    Référent technique
    Inscrit en
    Juillet 2007
    Messages
    834
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Référent technique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 834
    Points : 1 219
    Points
    1 219
    Par défaut
    Salut,

    Je ne veux pas dire de connerie mais il me semble qu'il n'est pas possible de rajouter des champs sur une structure infopath.
    Le problème sera que tu auras une erreur de schema xml.

    Je n'ai pas trop suivi ton problème mais peut-être que tu peux simplement avoir un tableau extensible et tu peux gérer les suppressions (voir aussi les ajouts) par le code.

    Ou tout simplement avoir une structure figée que tu gères avec des mises à jour conditionnelles.


    Bonne journée.

    Cordialement.
    Rémi MATAYRON
    N'hésitez pas à visiter mon blog dédié à InfoPath et SharePoint : http://rmatayron.blogspot.com/

    Pour plus de visibilité sur le forum, marquer la question en [Résolu] lorsque la réponse fournie vous convient.

  3. #3
    Nouveau membre du Club
    Inscrit en
    Avril 2008
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 44
    Points : 31
    Points
    31
    Par défaut
    Bon j'ai pas mal avancé à force de bûcher, et je tombe sur un truc à la con :s


    Je parcourt une source de données secondaires pour faire ce test, et en cas de succès je remplit un champ.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    private bool estFerie(XPathNodeIterator listFerie, string jourATest)
            {
                bool b = false;
                listFerie.Current.MoveToFirst();
                while (listFerie.MoveNext()) 
                {
                    if (jourATest == listFerie.Current.Value.ToString()) { b = true; MessageBox.Show(null, "le " + jourATest + " est férié", "Trouvé"); }
     
                }
                return b;
            }
    Ca marche pour le premier résultat trouvé, mais pas pour les autres.
    Or, si je fait un parallèle le même code pour juste afficher le contenu de la source, à savoir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     XPathNodeIterator listeFerie = DataSources["Jour Feries"].CreateNavigator().
                    Select("/dfs:myFields/dfs:dataFields/dfs:Jour_Fériés/@Date",NamespaceManager);
     
                string message = string.Empty;
                while (listeFerie.MoveNext())
                {   
                        message += listeFerie.Current.Value + System.Environment.NewLine;
                }
                MessageBox.Show(message);
    Ca me les affiche tous.

    Quelqu'un sait ou est mon erreur msieur'dame ?

    edit aucun rapport avec le 'e' de liste manquant, je le passe correctement en paramètre

  4. #4
    Membre éprouvé
    Homme Profil pro
    Référent technique
    Inscrit en
    Juillet 2007
    Messages
    834
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Référent technique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 834
    Points : 1 219
    Points
    1 219
    Par défaut
    A tout hasard:

    Ne récupére tu pas l'unique noeud sur lequel il est placé en faisant ton "Current" dans "listFerie.Current"?

    Je n'ai pas testé mais cela semble probable.

    As tu regardé le xml de listFérié.Current en debug?
    Tu ne dois pas tout avoir...
    Ou regarde combien de fois tu rentre dans ton while dans chaque cas...


    Cordialement.
    Rémi
    Rémi MATAYRON
    N'hésitez pas à visiter mon blog dédié à InfoPath et SharePoint : http://rmatayron.blogspot.com/

    Pour plus de visibilité sur le forum, marquer la question en [Résolu] lorsque la réponse fournie vous convient.

  5. #5
    Nouveau membre du Club
    Inscrit en
    Avril 2008
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 44
    Points : 31
    Points
    31
    Par défaut
    Alors c'est super bizarre, j'ai mis un text box avant la boucle, la première fois,(premier test) je récupère toute la liste, comme prévu (donc non pour ta question)
    Par contre pour les jours suivant je ne récupère que le dernier champ (donc oui ! ) mais même sur cette valeur le test ne marche pas ... en tout ca ya pas la MessageBox "trouvé"

    A priori je dirait que ca vient de me MoveToFirst, à part ca y'aurai quoi pour ce placer sur la première valeur ?

    Résolu : en fait une fois le premier test effectué le node iterator se retrouvait sur une seule node. du coup je l'ai cloné en debut de boucle et fait la boucle sur le clone et ca marche

  6. #6
    Membre éprouvé
    Homme Profil pro
    Référent technique
    Inscrit en
    Juillet 2007
    Messages
    834
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Référent technique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 834
    Points : 1 219
    Points
    1 219
    Par défaut
    Ben en fait il suffit que tu enlève le:
    listFerie.Current.MoveToFirst();


    J'ai regardé du codee que j'avais déja fait et j'attaquais direct le While après la selection.
    En tout cas je peux te certifier que cela marche.

    Bonne journée
    Cordialement
    Rémi
    Rémi MATAYRON
    N'hésitez pas à visiter mon blog dédié à InfoPath et SharePoint : http://rmatayron.blogspot.com/

    Pour plus de visibilité sur le forum, marquer la question en [Résolu] lorsque la réponse fournie vous convient.

  7. #7
    Nouveau membre du Club
    Inscrit en
    Avril 2008
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 44
    Points : 31
    Points
    31
    Par défaut
    Oui mais si je ne revenais pas à la première je serait tombé directement sur la dernière au second passage

    La solution
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    private bool estFerie(XPathNodeIterator listeFerie, string jourATest)
            {
                XPathNodeIterator liste = listeFerie.Clone();
                bool b = false;
     
                while (liste.MoveNext())
                {
                    if (jourATest == liste.Current.Value.ToString()) b = true;
                }
                return b;
     
            }
    Par contre j'ai un curieux problème concernant l'effacage :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    foreach (XPathNavigator selectedNode in liste)
                    {
                        if (selectedNode.Value.Contains("-"))
                        {
                            MessageBox.Show(selectedNode.Value);
                            //selectedNode.DeleteSelf();
                        }
    }
    Je ruse en detectant les nodes qui sont remplies par une date.
    Mais ce qui est 'zarb', si je demande seulement un affichage ca m'affiche les 31 jours par exemple, et si je demande l'effacage (DeleteSelf) ca m'efface la première et ca sort de la boucle, par contre si je reclique sur le bouton ca efface la suivante et ainsi de suite une par une ..

    C'est moi ou c'est complétement pas logique

Discussions similaires

  1. Créer un tableau à deux dimensions dynamique
    Par dev14 dans le forum Langage
    Réponses: 2
    Dernier message: 07/02/2012, 09h12
  2. créer un doc avec des champs dynamiques
    Par amoric69 dans le forum Autres SGBD
    Réponses: 0
    Dernier message: 18/01/2011, 19h51
  3. Créer un tableau des champs texte
    Par Invité dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 15/10/2008, 18h02
  4. Creer et supprimer des champs dynamiquement
    Par cfmreggae dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 13/05/2008, 09h54

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