[C# 2k5] DatagridView et sauvegarde

Résolu
cs_ChamY Messages postés 72 Date d'inscription mercredi 5 janvier 2005 Statut Membre Dernière intervention 22 mai 2009 - 8 janv. 2006 à 23:18
Mydriss Messages postés 1 Date d'inscription mardi 24 janvier 2006 Statut Membre Dernière intervention 28 janvier 2006 - 28 janv. 2006 à 09:38
Bonjour,

j'ai un probleme avec l'utilisation d'un datagridview (nouvelle version du datagrid de vd 2k3).


Je vous presente mon code :


Je créé une classe Personne, qui va contenir diverses informations comme le nom, prenom, age etc ...

Une fois créée, je ratache ma classe a une data source de type objet.


De cette facon, quand je fais un glisser deposer de ma base
sur une form, j'ai directement un DatagridView de créé; il contient une
colonne Nom, Prenom etc ... (ca facilite les binds par la suite, car
tous mes futurs element de ma form sont rattaché a mon objet)


Pour ajouter une personne à ma base je fais
Personnes.Add(new Personne("Nom","Prenom",Sexe.....);

Normalement j'utilise un Dataset pour sauvegarder ma table
( mydataset.Tables.Add(NomelaTable

puis mydataset.WriteXml(chemin); )


sauf que la je ne connais pas le nom de la table créée automatiquement

j ai essayé de faire un mydataset.Tables.Add();

pour prendre le nom par defaut, mais mon dataset reste vide.


Comment procéder pour sauvegarder cette table generé automatiquement ?

Peu etre en sauvegardant la liste des mes objets créés ? (mais pour les réouvrir apres ??)


Merci

Les sources de mon programme : http://thibault33.free.fr/Dossier%20Partagé/ClassePersonne.zip

5 réponses

MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
9 janv. 2006 à 10:39
C'est normal, puisque tu n'utlises pas un DataSet, Mais un BindingSource.
D'ailleurs, regarde dans ta fonction de sauvegarde, quand tu changes le DataSource par un Dataset, ton DatagridView se vide, puisque tu lui assignes un nouvel objet.
Je connais pas la "bonne" solution a ce que tu veux faire.
Mais une solution qui marche, serait simplement de serializer ton instance de PersonneCollection


<HR>
XmlSerializer xmlSer =
new
XmlSerializer(
typeof(
PersonneCollection));
xmlSer.Serialize(
new
FileStream(
"save.xml",
FileMode.CreateNew), Personnes);

<HR>

J'espere que quelqu'un pourra te donner une meilleure réponse que la mienne.

Mx
MVP C#
3
cs_ChamY Messages postés 72 Date d'inscription mercredi 5 janvier 2005 Statut Membre Dernière intervention 22 mai 2009
9 janv. 2006 à 19:40
Je te remercie, je comprends un peu mieux pourquoi ca ne marcher pas.
Ton code est bon pour sauvegarder tout le contenu de ma table.
J'ai voulu adapter ton code pour ouvrir maintenant le fichier créé
----------------
PersonneCollection myObject;
// Construct an instance of the XmlSerializer with the type
// of object that is being deserialized.
XmlSerializer mySerializer =
new XmlSerializer(typeof(PersonneCollection));
// To read the file, create a FileStream.
FileStream myFileStream =
new FileStream("c:\\save.xml", FileMode.Open);
// Call the Deserialize method and cast to the object type.
myObject = (PersonneCollection)
mySerializer.Deserialize(myFileStream);

-----------------------

mais j'ai une erreur : "There is an error in XML document (240, 21)."

Mais de toute facon, avant ca :
Je ne compte pas en rester la avec ma collection de personne.
Comme tu as pu le voir sur mon programme, j ai rajouter 4 colonnes de types chexkboxe.
Cela va me permettre de faire un trie :
exemple : si je veux toutes les personnes ou la case de la colonne 1 est cochée.

Je comptais faire ca a l'aide d'un dataset rempli, je pense que ca sera difficile apres ca :(

Merci en tout cas pour ta reponse.
Si tu penses voir comment poursuivre mon programme, j'en serais ravi :)
(J'ai besoin rapidement de ce type de programme pour une application personnelle)

Merci
Thibault
0
cs_ChamY Messages postés 72 Date d'inscription mercredi 5 janvier 2005 Statut Membre Dernière intervention 22 mai 2009
9 janv. 2006 à 22:15
Je viens de trouver le moyen d'ouvrir mon fichier xml facilement.
J'ai juste quelques problemes du a mon combobox. Il n'arrive pas a attribuer la valeur, mais je vais regarder ca.

northwindDS = new DataSet();
northwindDS.ReadXml("c:\\save.xml", XmlReadMode.Auto);
northwindDS.Locale = System.Globalization.CultureInfo.CurrentUICulture;

personneDataGridView.AutoGenerateColumns = false;
personneDataGridView.DataSource = northwindDS;
personneDataGridView.DataMember = "Personne";
0
cs_ChamY Messages postés 72 Date d'inscription mercredi 5 janvier 2005 Statut Membre Dernière intervention 22 mai 2009
10 janv. 2006 à 00:05
ok j'ai bien avancé :) je suis assez satisfait du resultat.
Je n'ai pas réussi a réouvrir le fichier généré par la methode Serialize ou Deserialize (il deserialize mais n'affiche rien).
Alors je suis passé par une autre methode (ca charge beaucoup le code, et ce n'est surement pas propre du tout).
Avec la methode au dessus je lis donc mon fichier xml (sauvegarder auparavent par le Serializer) et je l'affiche dans mon datagridview.
La difference avec le depart (donc apres chargement du fichier xml), c est que je ne dispose plus de mon BindingSource, mais d'un dataset rempli avec les données correctement.

Mon code du dessus, met le fichier xml dans mon dataset et je peux ainsi manipuler facilement mes lignes de la table. ( on peut peu-etre le faire avec les Bind mais je ne sais pas le faire).

J'aimerai juste (si c'est possible) re-binder ce dataset (qui contient la table lue). Pour pouvoir avoir acces a mes bind comme avant. (Re construire ma lsite de personne ?)

Ce n'est peu etre pas tres clair ... desoler

voila le morceau de mon code :

-----------------------------------------
northwindDS = new DataSet();
northwindDS.ReadXml("c:\\save.xml", XmlReadMode.Auto);
northwindDS.Locale = System.Globalization.CultureInfo.CurrentUICulture;

personneDataGridView.AutoGenerateColumns = false;
personneDataGridView.DataSource = northwindDS;
personneDataGridView.DataMember = "Personne";

// la pas de prob j ai mon datagrid complet
//j'essai de le binder
bindingSource1.DataSource = northwindDS.Tables; // ne marche pas
------------------------------------------
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Mydriss Messages postés 1 Date d'inscription mardi 24 janvier 2006 Statut Membre Dernière intervention 28 janvier 2006
28 janv. 2006 à 09:38
Merci de m'envoyer des tutoriels sur le DATAGRIDVIEW et son utulisation en C#au mail suivant drissachegri@yahoo.fr
0
Rejoignez-nous