Récupération de types de variables sur une instance fournit par un Web Service

diachun Messages postés 5 Date d'inscription mardi 5 mai 2009 Statut Membre Dernière intervention 7 mai 2009 - 5 mai 2009 à 16:35
diachun Messages postés 5 Date d'inscription mardi 5 mai 2009 Statut Membre Dernière intervention 7 mai 2009 - 6 mai 2009 à 10:47
Bonjour,
Ma config:Visual Studio 2008, code behind en C# et page aspx
Alors voila, je travaille sur une référence de web service que l'on va appeler Client_service.






protected
Client_Service Cs = newClient_Service();




/*Ce service me permet de récupérer des instances de type client*/



Client[] list = Cs.ReadMultiple(filtre.ToArray(), null, 100

);
/
*ou readMultiple est une méthode fournie par Cs qui me renvoie une liste de client mais bref...passons




Cl possède des attributs (Name, ID, Adresse etc...) auxquels je peux accéder par la boucle suivante*/




foreach



(PropertyInfo pi in Cl.GetType().GetProperties())




/*Pour l'attribut Adresse par exemple, pi.Name ="Adresse" et pi.getValue(Cl,null) vaut "Monsieur Jesuisla" (par exemple!au hasard...)Jusque la vous suivez? Ok car c'est la que ça se complique:
je veux pouvoir récupérer des variables de type String dans des textboxes(t.Text) et les caster afin de changer les valeur de mes propriétés pi.Le problème c'est que certaines valeurs sont des String d'autres des Integer ou encore des Doubles
Alors j'ai testé ça:*/


{
System.Type st = pi.GetValue(Cl, null).GetType();

/*En s'assurant que pi.GetValue !=null biensur*/


st val = (st)cible.Text;



 }




/*Et ça court pas des masses...ça ne marche même pas...*/




Quelqu'un de charitable aurait une idée?

Je vous remercie

4 réponses

titeoe Messages postés 433 Date d'inscription samedi 26 avril 2003 Statut Membre Dernière intervention 4 décembre 2009 1
6 mai 2009 à 08:58
Bonjour,

Quand tu dis que ca ne marche pas, as tu un message d'erreur ?
Quelle est la valeur de "val" dnas ta boucle ?

Si tu veux affecter la propriété de ton objet Cl, tu peux faire ceci :

Cl.GetType().GetProperty(pi.Name).SetValue(Cl, (st)cible.Text, null);
0
diachun Messages postés 5 Date d'inscription mardi 5 mai 2009 Statut Membre Dernière intervention 7 mai 2009
6 mai 2009 à 09:28
Salut titeo, alors j'ai essayé de mettre le code suivant:

try

{
System.

Type
st = pi.GetValue(Cl,

null
).GetType();
Cl.GetType().GetProperty(pi.Name).SetValue(Cl, (st)
cible.Text,
null
);
}


catch
(

Exception
e)
{

this
.Controls.Add(

new



LiteralControl
(

"Erreur lors du traitement "
+ e.Message +

""
)); }
Et à la compilation il ne reconnait pas st (celui en rouge)
avec le message suivant:
Le type ou le nom d'espace de nom st est introuvable (une directive using ou une assembly est elle manquante?).
Il me laisse pas faire ce cast (st)...
0
titeoe Messages postés 433 Date d'inscription samedi 26 avril 2003 Statut Membre Dernière intervention 4 décembre 2009 1
6 mai 2009 à 10:15
Et ca , ca marche ?

Cl.GetType().GetProperty(pi.Name).SetValue(Cl, cible.Text, null );
0
diachun Messages postés 5 Date d'inscription mardi 5 mai 2009 Statut Membre Dernière intervention 7 mai 2009
6 mai 2009 à 10:47
Oui, avec name ça marche puisqu'il attend un String comme type de donnée("Monsieur ASP"  par exemple.Mais avec une autre donnée comme "Client.solde" qui attend un decimal genre 1500, il va me retourner qu'il attend un System.Decimal et que moi je lui file un System.String.
0
Rejoignez-nous