[C# 2k5] DatagridView et sauvegarde [Résolu]

cs_ChamY 74 Messages postés mercredi 5 janvier 2005Date d'inscription 22 mai 2009 Dernière intervention - 8 janv. 2006 à 23:18 - Dernière réponse : Mydriss 1 Messages postés mardi 24 janvier 2006Date d'inscription 28 janvier 2006 Dernière intervention
- 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
Afficher la suite 

Votre réponse

5 réponses

MorpionMx 3489 Messages postés lundi 16 octobre 2000Date d'inscription 30 octobre 2008 Dernière intervention - 9 janv. 2006 à 10:39
+3
Utile
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#
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de MorpionMx
cs_ChamY 74 Messages postés mercredi 5 janvier 2005Date d'inscription 22 mai 2009 Dernière intervention - 9 janv. 2006 à 19:40
0
Utile
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
Commenter la réponse de cs_ChamY
cs_ChamY 74 Messages postés mercredi 5 janvier 2005Date d'inscription 22 mai 2009 Dernière intervention - 9 janv. 2006 à 22:15
0
Utile
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";
Commenter la réponse de cs_ChamY
cs_ChamY 74 Messages postés mercredi 5 janvier 2005Date d'inscription 22 mai 2009 Dernière intervention - 10 janv. 2006 à 00:05
0
Utile
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
------------------------------------------
Commenter la réponse de cs_ChamY
Mydriss 1 Messages postés mardi 24 janvier 2006Date d'inscription 28 janvier 2006 Dernière intervention - 28 janv. 2006 à 09:38
0
Utile
Merci de m'envoyer des tutoriels sur le DATAGRIDVIEW et son utulisation en C#au mail suivant drissachegri@yahoo.fr
Commenter la réponse de Mydriss

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.