Forum des développeurs  

Le forum de référence en programmation et développement. Articles, cours et tutoriels du débutant au chef de projet et DBA confirmé.
Précédent   Forum des développeurs > Hardware, Systèmes et Logiciels > Microsoft Office > InfoPath

InfoPath Forum d'entraide sur InfoPath (concevoir des formulaires basés sur XML)

Réponse
 
Outils de la discussion
Vieux 04/06/2008, 16h51   #1 (permalink)
Membre à l'essai
 
Date d'inscription: avril 2008
Messages: 44
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

Dernière modification par Yurnero_ ; 09/06/2008 à 10h47
Yurnero_ est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 05/06/2008, 09h30   #2 (permalink)
Membre du Club
 
Date d'inscription: juillet 2007
Localisation: Cote Ouest
Âge: 25
Messages: 107
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.
billout rm est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 12/06/2008, 17h47   #3 (permalink)
Membre à l'essai
 
Date d'inscription: avril 2008
Messages: 44
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 :
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 :
 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
Yurnero_ est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 12/06/2008, 18h24   #4 (permalink)
Membre du Club
 
Date d'inscription: juillet 2007
Localisation: Cote Ouest
Âge: 25
Messages: 107
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
billout rm est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 13/06/2008, 10h20   #5 (permalink)
Membre à l'essai
 
Date d'inscription: avril 2008
Messages: 44
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

Dernière modification par Yurnero_ ; 13/06/2008 à 10h47
Yurnero_ est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 13/06/2008, 10h48   #6 (permalink)
Membre du Club
 
Date d'inscription: juillet 2007
Localisation: Cote Ouest
Âge: 25
Messages: 107
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
billout rm est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 13/06/2008, 11h30   #7 (permalink)
Membre à l'essai
 
Date d'inscription: avril 2008
Messages: 44
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 :
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 :
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
Yurnero_ est déconnecté   Envoyer un message privé Réponse avec citation
Réponse

Précédent   Forum des développeurs > Hardware, Systèmes et Logiciels > Microsoft Office > InfoPath

 
Offres d' emploi informatique sur Lesjeudis.com


Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are non
Pingbacks are non
Refbacks are non
Navigation rapide