# Dotnet > Gnral Dotnet > Dveloppement Office System > InfoPath >  Remplir un tableau gnr dynamiquement

## cocosql

Bonjour, je suis confront  un nouveau problme  ::mur:: 

Je souhaiterais remplir ce tableau

Le nombre de lignes de ce tableau est contenu dans la base de donnes, et lorsque je clique sur le bouton, le code suivant est excut :


```

```


La cration du tableau marche sans aucun problme, mais la ou je bloque c'est ici :

-Je dois  prsent remplir les colonnes de ce tableau avec des champs de ma base de donnes.
La solution que j'envisage (enfin le dbut de solution ^^) est la suivante :

-Je rcupere tous les champs de ma base via un webservice
-Je les concatne dans un champ de mon formulaire
-Avec JScript, je split afin de rcuprer tous les champs comme ils sont stocks dans la base.

Le souci, c'est que je ne sait pas comment :
-Spliter en JScript
-Affecter une colonne d'un tableau en JScript

Cependant, si vous voyez une solution plus simple, je suis aussi preneur  ::P:

----------


## virgul

Salut,




> Je rcupere tous les champs de ma base via un webservice


Comment en XML? c'est dans une source de donnes secondaire de Infopath?

Comment es-ce structur?

----------


## virgul

pour gagner un peu de temps dans ton code et afin qu'infopath ne ractualise pas a chaque insert tu peux mettre au dbut de ton code:



```
XDocument.View.DisableAutoUpdate();
```

et a la fin:



```
XDocument.View.EnableAutoUpdate();
```

Tu verras ca ira plus vite.

----------


## cocosql

Non je ferais une requete SELECT qui renverrais un arraylist je pense ou bien je reverrais tout sous forme de chaine concatne, je ne sais pas trop encore.

J'ai expriment C# et XML et c'est vraiment pas vident ^^

----------


## Yurnero_

Bonjour cette solution de travail m'intresse beaucoup.



```
XDocument.View.ExecuteAction("xCollection::insert", "groupe2_1");
```

Tu aurait un lien avec des dtails concernant l'utilisation de XDocument et de l'insertion, j'avais essay mais il me manquait une assembly system.xml.link je croit, qui tait introuvable. (j'ai prit l'habitude d'utiliser c# et 

Potentiellement, on peut arriver  (en fonction du mois choisi)
 un tableau de (31, fx mois)  date,liste droulante, en ajoutant ces champs de la mme manire ? et les traiter par la suite ? Je pense notamment a empcher l'dition des jours non ouvrables ...

J'ai prit l'habitude d'utiliser 


```

```

 Mais je ne peut pas utiliser une node dont le nom est modifi en concatenant des chiffres par ex, mme si le champ existe.

Mais c'est beaucoup trop long de crer 31 fois nb de colonnes champ  la main !

----------


## virgul

> Bonjour cette solution de travail m'intresse beaucoup.
> 
> XDocument.View.ExecuteAction("xCollection::insert", "groupe2_1");


Euh ca c'est du code de Infopath Version 2003 et pas 2007. Je ne connais pas l'quivalent en 2007 mais tu devrais trouver facilement dans MSDN comment faire.

----------


## Yurnero_

ok, une confirmation, il y a bien une assembly  ajouter ?

edit : si c'est bien : System.Xml.Linq (in System.Xml.Linq.dll)
je ne l'ai pas sur ma machine de dev, c'est normal ?

----------


## cocosql

Je ne saurais te rpondre  ::roll:: 

pour ce qui est de 2003, je n'ai pas eu d'assembly  ajouter

----------


## cocosql

Ce n'est pas du C# ce code est en JScript !

edit : cr sous InfoPath avec Microsoft Script Editor

----------


## Yurnero_

::cry:: 



```

```

ah ? une bonne nouvelle
la mauvaise, c'est ou ca ? Oo

----------


## cocosql

lool

en fait je pense aussi passer en c# mais il faut que je procure visual studio avec office tools developper kits, j'aimerais pouvoir utiliser du code c# aussi  :;):

----------


## cocosql

stop edit :p

bah c'est pas une bonne nouvelle mais bon, tu code avec quoi toi ?

J'ai du mal a cerner Infopath, car j'ai un peu appris sur le tas de moi meme. Mais :

-Je fais le formulaire sous Infopath
-Je remplis des champs avec des webservices en c# dvelopps avec Visual Web Developper Express Edition
-Et j'ai du avoir recours au JScript d'InfoPath pour crer mon tableau automatiquement (avec Microsoft Script Editor) mais Virgul m'a dit qu'on pouvait coder en C# au lieu de JScript en utilisant Visual Studio et Office Developper Tool Kit

----------


## Yurnero_

Ah ceci explique cel, je suis sous infopath 2007, donc je suppose que la limitation c#/ vb n'est pas sur la 2003, et qu'on y codait en Jscript ?

Bon merci, je vais chercher si il y a du c# permettant ca !

edit : visual studio 2005 avec VSTA

----------


## cocosql

On peut coder en C# avec 2007 ?

Ah bah meme pas besoin de se procurer Visual Studio alors

Oui en 2003 tu as soit VBScript soit JScript  ::arrow::   ::marteau::

----------


## virgul

Oula vous avez totalement faux tous les deux dsol...

Le code qui est sur ce poste est du code Jscript avec le modle object 2003 de Infopath. Avec 2003 on travaille avec msxml3 et avec 2007 on utilise msxml6 je crois.

Donc le syntax diffre ce qui fait que le code jscript modle object 2003:


```
XDocument.View.ExecuteAction("xCollection::insert", "groupe2_1");
```

en C# modle object 2003:


```
thisXDocument.View.ExecuteAction("xCollection::insert", "groupe2_1");
```

Ce code en modle object 2007 (C# et jscript) ne s'crit pas comme ca. Il s'crit autrement vous le trouverez surement sur MSDN.

Pour dvelopper en C# on doit avoir Visual Studio que ce soit en 2007 ou en 2003. Note: pour la version 2003 faut avoir minimum la SP1 pour pouvoir coder en C# (actuellement Office 2003 est en SP3).

J'espre que j'ai t clair et que vous comprendrez.

----------


## virgul

```
Non je ferais une requete SELECT qui renverrais un arraylist je pense ou bien je reverrais tout sous forme de chaine concaténée, je ne sais pas trop encore.
```

oui ben c'est bien beau tout ca mais ca me dit pas sous quelle forme? tes champs concatns y ont quoi dedans? Et surtout il doivent aller dans quelle partie du xml? 

La c'est un peu comme si je demandais: "Comment on ouvre une porte?"

et que je me demande pourquoi personne ne rpond? Ah ben oui j'oubli de frapper  ::aie::

----------


## cocosql

Bon on fait simple :

je rcupere de la base les champs dans un webservice qui va les concatener et renvoie un string contenant les champs concatns (spars par une '*' par exemple).

Dans le formulaire, je rcupre ce string qui est la concatnation des champs de la base dans un champ InfoPath.

Et ensuite je split cette string concatne en JScript et j'inserer les champs splits dans mon tableau extensible, et ce  chaque insertion de ligne.

 ::D:

----------


## cocosql

Oki, problme rsolu, je poste le code de la solution si y'en a qui ont le mme problme :



```

```


Voil, merci une fois de plus  Matre Virgul   ::hola::

----------


## Yurnero_

XDocument marche nativement chez toi ?

----------


## cocosql

Oui, je ne passe par aucun intermdiaire ...

faut juste pas oublier le XDocument.DOM

n'est-ce pas Virgul ?  ::roll::

----------


## virgul

> XDocument marche nativement chez toi ?


En C# version Infopath 2003 faut utiliser thisXDocument a la place de XDocument

Pour 2007 c'est diffrent

----------


## Yurnero_

Oui j'ai refait l'install de visio pour voir si j'avais rien oubli, j'ai accs aux autres languages mais bon ..
Au final je sait toujours pas comment m'y prendre pour faire mon truc  ::): 

A prioris j'aimerait le faire en vb mme si je connait pas, mon problme c'est la syntaxe pour faire la premire ligne de mon tableau, aprs les boucles je devrait y arriver

sigh

----------


## cocosql

c'est quoi ton "truc" ?  ::D:

----------


## Yurnero_

ah l j'ai du rver l'avoir post alors.

J'aimerais gnrer automatiquement un tableau avec pour les 31 jours d'un mois selectionn par liste droulante, 3 champs

Mais je ne sait pas comment lire ou insrer des nodes en vb, comme tu le fait en jscript.

Je comprend d'ailleur pas plus le vb, que le js, par contre ya pas d'assembly a mettre  ::): 

Tu ne dclare pas ta 'collection' ?

----------


## cocosql

Euh je comprends un petit peu, enfin du moins ce que tu veux faire.

Ca ressemble  mon problme je devais gnrer un tableau d'un nombre de lignes indfini  l'avance. Ton problme est donc quoi ? 

Le nombre de lignes ?
Comment les remplir ?

----------


## Yurnero_

Comment ! 

me newb ::aie:: 

edit : sachant qu'a priori je vais avoir besoin d'avoir un langage permettant de faire quelques calcul par la suite

----------


## cocosql

Tkt moi aussi :p mais j'ai recu des enseignements de maitre virgul et je m'en sors  peu prs  prsent.

Tu n'a pas un schma ou une screen de ton tableau (du moins de ce que tu voudrais qu'il soit) ?

Aprs je peux t'indiquer la procdure  faire pour remplir le tableau, mais je ne comprends pas trop ce que tu veux mettre dedans, tu veux prendre des infos d'une base de donnes ? D'un fichier xml ? Ou d'une autre source  ::D:

----------


## Yurnero_

Alors

[Liste droulante Mois][anne]

En fonction de ces controles, gnrer pour chaque jour du mois

[Date (si possible avec le DayofWeek)] [une liste droulante] [une deuxime liste droulante]
les deux tant extraite de source de donnes sharepoint

pour le moment.

Si tu as un exemple en c# pour la cration de node je suis preneur ! 
La dernire ligne avec select c'est elle qui cr la node ?

----------


## cocosql

En fait tu as l'insert qui ajoute une ligne au tableau extensible, donc elle cr un nouveau noeud (du moins il me semble  ::): )

et ensuite je slectionne le dernier noeud que je viens de crer et je lui attribue une valeur.

Le premier selectSingleNode que je fais est pour traiter la premire ligne du tableau extensible.

J'ai mon tableau extensible (comportant une ligne pour le moment)
Et  chaque tour de boucle :
-J'insre une ligne dans le tableau (cration d'un nouveau node)
-Je rcupre le dernier noeud et je lui attribue une valeur.

----------


## Yurnero_

Sur la logique je comprend, np c'est plus la mise en pratique ..
Tu aurait l'quivalent de ton insert en c#  ::mrgreen:: 
J'ai essay Jscript ca voulait pas ouvrir le form, et c'est trop merdique, pas de ptit navigateur object  ::(:

----------


## Yurnero_

EDIT :
Ah l'erreur tait due au type du champ modifi, ca marche en string, mais pas en date, au final ca marche pas vraiment 

 ::aie::

----------


## Yurnero_

Je veut dire par l si on veut rcuprer ces infos dans SharePoint, pour faire un calendrier entre autre, ca n'est pas possible  moins d'avoir un DateTime  ::(:

----------


## Yurnero_

Bonjour, j'ai donc russi  utiliser ta mthode et aprs un gros dbroussaillage j'ai dgag quelques problmes (autres que le dateformat..)

L'ajout d'element  mon tableau se fait via un controle chang, qui  par defaut une valeur en fonction de 2 controle(mois, anne), c'est pratique puisque ca permet d'en surveiller deux, mais il est initialis  vide aussi.

Donc une fois le formulaire dmarr, mon controle prend sa valeur et on rentre une premire fois dans le code du contle chang, et c'est uniquement pour cette premire fois que j'ai une erreur sur la ligne


```
this.CurrentView.ExecuteAction(ActionType.XCollectionInsert, "groupe13_457");
```

Et galement j'aimerais pouvoir effacer les lignes ainsi ajoute lorsque je change de mois. Le problme c'est que si j'utilise 


```
CurrentView.ExecuteAction(ActionType.XCollectionRemoveAll, "groupe13_457");
```

Ca efface la collection et on ne peut par la suite plus en rajouter. 

A ce niveau c'est plus un problme de raisonnement, puisque ma premire tentative tait de mettre l'effacage, au dbut du code, le problme c'est que ca effacait direct le champ que l'on copie par la suite.

Quelle serait la meilleure mthode ?
Effacer avec une boucle les champs ainsi crs ? (je ne sait pas vraiment comment spcifier les champs)

Russir  cr galement la collection en code ?

Autres ?

Cordialement

----------


## billout rm

Salut,


Au niveau de ton problme de format: cela fonctionne en string et pas sur un champ date.

Ceci est logique: regarde la diffrence de ton xml lorsque tu emploie chacun de ces types  tour de rle. 
Tu as un attribut "xsi:nil" en plus lorsque tu utilise le champ date, comme sur les integer,dcimaux,...

Il faut donc que tu rajoute cet attribut pour ne pas avoir une erreur de schma XML!


En esprant avoir pu t'aider.

Cordialement.

----------


## Yurnero_

Cet attribut xsi:nil indique si on peut le laisser 'vide' ou non, c'est bien cel ? il correspond  l'toile rouge sur infopath donc  la case, 'peut tre vierge' d'aprs ce que j'ai trouv

merci  ::): 

Cordialement

edit :
Although the implementation of the XPathNavigator object in InfoPath 2007 exposes the SetTypedValue methodwhich is used to set a node using a value of a specific typeInfoPath does not implement that method. You must use the SetValue method instead, and pass a string value of the correct format for the data type of the node.

Ca veut bien dire qu'il faut que je crer une string avec "0,5" que je la passe avec setvalue et que le champ en question soit format en dcimal ???

edit 2 : et non je l'ai pass en format "0,5" mais ca me met toujours le champ encercl par des tiret rouge, en exigeant un nombre. Le truc rageant c'est que si j'efface le 5 et que je le remet ca valide et tout baigne ><

----------

