Bonjour,
j'ai une IList, et j'aimerais en retirer un DataTable.
j'ai trouvé une méthode sur le net, mais qui ne fonctionne pas.
Pouvez vous m'aider à trouver ca?
merci![]()
Bonjour,
j'ai une IList, et j'aimerais en retirer un DataTable.
j'ai trouvé une méthode sur le net, mais qui ne fonctionne pas.
Pouvez vous m'aider à trouver ca?
merci![]()
ca dépend de ce qu'il y a dans ton ilist mais normalement y a pas de probleme ...
si ton Ilist contient des objet "Chien" avec comme champ "nom" et "race" tu fais (ecris un peu à l'arrache mais c'est l'algorithmique qui compte):
et dans ton fichier aspx :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 mydatalist.datasource = myilistdechien; mydatalist.databind();
Code : Sélectionner tout - Visualiser dans une fenêtre à part Eval("nom") .... Eval("race")
j'ai pas bien pigé.
je voudrais simplement un,e méthode qui prend une IList et qui me rend un DataTable
une méthode dans ce genre ci:
mais ca me sort des suite de caractères bizarre...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 /// <summary> /// Transfrom Generic List to DataTable /// </summary> /// <param name="list">Generic List of objects</param> /// <param name="name">Name of the DataTable to be generated</param> /// <returns>DataTable containing objects from the Generic list</returns> public static DataTable TransformIListToDataTable(IList list, String name) { if (list == null) { return null; } DataTable dt = new DataTable(name); BinaryFormatter bin = new BinaryFormatter(); System.IO.MemoryStream mem = new System.IO.MemoryStream(); String str = ""; dt.Columns.Add(); foreach (object obj in list) { mem = new System.IO.MemoryStream(); bin.Serialize(mem, obj); str = Convert.ToBase64String(mem.ToArray()); dt.Rows.Add(str); mem.Close(); } return (dt); }
Que dois je modifier à la méthode pour que cela ne le fasse pas?
Pour ce cas ci je pourrais me contenter d'une méthode adaptée mais je vais de toute facon devoir réussir à trouver une méthode plus générique car j'aurai d'autres transformations d'IList à faire plus tard.
En fait, si tu veux une méthode générique, il va falloir regarder du côté de la "Réflection" du langage pour pouvoir connaître les propriétés exposées par les objets de ton IList.
Sinon, actuellement, tu peux procéder comme ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 DataTable _dt = new DataTable(); _dt.Columns.Add(new DataColumn("Nom_Colonne1"); _dt.Columns.Add(new DataColumn("Nom_Colonne2"); _dt.Columns.Add(new DataColumn("Nom_Colonne3"); foreach (object _monObjet in MaList) { DataRow _dr = _dt.NewRow(); _dr["Nom_Colonne1"] = _monObjet.Propriete1; _dr["Nom_Colonne2"] = _monObjet.Propriete2; _dt.Rows.Add(_dr); }
ok pour le principe....
mais je coince sur ceci:
comment dois je faire pour accéder aux propriétés de mes objects?
Code : Sélectionner tout - Visualiser dans une fenêtre à part _dr["Nom_Colonne1"] = _monObjet.Propriete1;
Je ne sais pas si tu as fait du Java, mais en fait, les propriétés des objets sont des raccourcis pour des accesseurs.
Voici un petit exemple :
Dans ce petit bout de code, Champ1 est une propriété en lecture / écriture des objets du type MonObjet. Elle permet d'avoir accès à la valeur de la variable privée _champ1. Si tu ne mets que la partie get, elle est en lecture seule, si tu ne mets que la partie set, elle est en écriture seule
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 class MonObjet { private string _champ1; public string Champ1 { get{return _champ1;} set{_champ1 = value;} } }
En java, cela reviendrait à écrire deux méthodes du genre
- public string getChamp1(){return _champ1;};
- public void setChamp1(string Value){_champ1 = Value;}
Pour accéder à la propriété de l'objet :
Donc, si les objets sont définis par toi, il te suffit de faire des propriétés pour les champs que tu veux exposer, sinon, il faut connaître les propriétés offertes ou les champs publics ou les méthodes des objets que tu utilises pour en récupérer les valeurs que tu veux mettre dans ta table.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 MonObjet _monObjet = new MonObjet(); _monObjet.Champ1 = "test"; string _test = _monObjet.Champ1;
je n'ai pas trop suivi le rapport avec le java, ni même le rapport de l'ensemble de ton post d'ailleurs
en fait, lorsque je fais mon foreach, pour mes objects pris dans mon IList, je ne comprends pas comment toi tu arrives à aller rechercher les propriétés de cet objet.
car moi tout ce qu'il me propose sur mon objet, c'est 4 méthodes (Equals,gethashcode,gettype,tostring). mais il ne me donne pas les propriétés ou méthodes du type d'objet contenu dans mon IList.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 foreach (object _monObjet in MaList) { DataRow _dr = _dt.NewRow(); _dr["Nom_Colonne1"] = _monObjet.Propriete1;
Ok, je n'avais pas bien compris ta question.
En fait, il faut que dans la boucle "foreach", tu remplace "object" par le type de ton objet.
Par exemble, si les objets de ton Ilist sont du type DateTime, cela te donne :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 foreach (DateTime _monObjet in MaList) { DataRow _dr = _dt.NewRow(); _dr["Nom_Colonne1"] = _monObjet.Propriete1;
ah oui ok, c'est tout con en fait lol.
je pensais qu'il fallait absolument mettre "object" comme membre de IList, et qu'il était censé trouver le type lui-même par rapport à ce qu'il trouvait dans la IList.
Ok j'ai mieux compris maintenant, je devrais réussir
merci de tes réponses![]()
voilà j'ai réussi à faire ce que je voulais et récupérer comme je le voulais.
Un petit résolu?
Edit: confondu de post, et ok pour la prochaine fois, j'espère que tu te fera envoyer bouler pour de l'aide
Partager