Xmlreader en winform

Résolu
fmarinelli Messages postés 13 Date d'inscription jeudi 26 janvier 2012 Statut Membre Dernière intervention 23 mars 2012 - 22 mars 2012 à 16:56
Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 - 23 mars 2012 à 20:14
Bonjour à tous ,

Je vous pose mon problème :

en naviguant sur la toile et sur le forum je ne trouve que des exemples c# console , moi j'utilise le mode winform c'est pour celà que je vous pose la question suivante : Comment Afficher un fichier Xml en application winform
pâr exemple dans un label , RichText ... ect

j'ai un programme qui marche en application console le voici :


XmlReader reader = XmlReader.Create(@"C:\Users\Flo\Desktop\jeu1\jeu\bin\Debug\joueur.xml");
while (!reader.EOF)
{
reader.Read();
Console.Write(reader.Value); }
reader.Close();
Console.Read();


il fonctionne de toute beauté seulement je n'arrive pas a l'adapter pour mon application winform :(

un petit coup de pouce de votre part ferait un grand Heureux :)

Merci !

lulu

24 réponses

fmarinelli Messages postés 13 Date d'inscription jeudi 26 janvier 2012 Statut Membre Dernière intervention 23 mars 2012
23 mars 2012 à 18:12
Oui et effectivement celà marche trés bien , s'ouvre Differente fenete d'erreur dans lequel tu avais spécifier par :

"version="1.0" encoding="utf-8"", "ça ne marche pas", "Robert score 10", "Marche pas non plus", "jEan    score        22.", "Robert scure 10"};



Je commence un peu a comprendre ta fonction ( pas si facile hein ) j'ai d'ailleur vu different exemple. Si tu as le temps ou même l'envie , juste de m'expliquer en quoi pour mon utilisation celà peut me servir ?

brivement , je concois un jeu en c# winforms ( jeu de type plate forme ) et donc a la fin je demande le nom du joueur et "sauvegarde" son score .
Je sérialise le tout , et je veux donc que quand l'utilisateur veux voir le classement s'afficher ma liste de joueur. Ce qui serais bien ce serais de trier ma liste par score decendant , a ce niveau j'y travail avec la fonction suivante :

            public class Joueur

            {
                public string Nom;
                public int Score ;
            }

        class TriJoueur : IComparer<Joueur>

        {
            public int compare(Joueur a,Joueur b)
        {
            if (a.Score > b.Score)

            return +1 ;
            if (a.Score < b.Score)
            return -1 ;

            if (a.Score == b.Score)
            return 0;

        }


        }



Avec iComparer et tout le tralala !

lulu
0
Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 656
23 mars 2012 à 19:47
Trois choses:

1)
Dans ta boucle au départ tu lisais ton xml ligne par ligne de façon à en ressortir les valeurs,

tu voulais voir apparaitre uniquement le prénom et les points (je différencie bien du mot score) et que la ligne "version="1.0" encoding="utf-8" soit rejetée.

L'exemple que je t'ai soumis fait ça, à toi de l'intégrer à ton code si tu le souhaites.

2)
Puisque tu as une classe joueur, que visiblement tu serialises et déserialises à chaque utilisation.
Tu dois utiliser une list<Joueur> je suppose.
Pourquoi ne pas afficher directement cette liste dans un datagridview?
Pour ça la méthode de base est d'associer le datasource du datagridview avec ta liste, ça va automatiquement te créer une colonne par propriété de ta class et une ligne par instance.
Puisque tu as géré le Icomparer, il te suffit de trier ta liste avant de la mettre en datasource. Ce n'est pas la méthode la plus personnalisable, mais c'est simple. Si tu veux renommer les colonnes, changer l'ordre etc.. il faut utiliser le binding, voir ici.

3)

            public class Joueur

            {
                public string Nom;
                public int Score ;
            }


Ce codage est déconseillé en c#, il est préférable d'utiliser des propriétés, d'ailleurs pour le 2), il t'en faut.
L'intérêt est d'avoir une passerelle entre une variable interne à ta classe dont tu fais ce que tu veux (surtout pour de futures évolutions) et l'accès depuis l'extérieur qui lui reste inchangé. Ca donne ça:

    class Joueur
    {
        private string nom;
        private int score;

        public string Nom
        {
            get { return nom; }
            set { nom = value; }
        }

        public int Score
        {
            get { return score; }
            set { score = value; }
        }
    }


Dans ton cas les variables internes n'apportent rien puisqu'il n'y a pas de méthodes, ni événements dans ta classe, tu peux alors simplifier comme ça:

    class Joueur
    {
        public string Nom { get; set; }

        public int Score { get; set; }
    }


Comme ça tu gardes la porte ouverte pour l'avenir.
Petite astuce quand tu veux écrire une propriété, tu tapes prop, intellisense va te proposer prop, propa et propdp.
Si par exemple tu chois prop tapes deux fois sur tab,
 public int MyProperty { get; set; }
s'écrit automatiquement et int est sélectionné, tu peux changer le type à loisir, puis tapes à nouveau sur tag c'est alors MyProperty qui est sélectionné, tu changes alors le nom.


Voilà j'espère ne pas t'embrouiller.




Whismeril
0
fmarinelli Messages postés 13 Date d'inscription jeudi 26 janvier 2012 Statut Membre Dernière intervention 23 mars 2012
23 mars 2012 à 20:10
Beautifull
  dataSet1.ReadXml(@"C:\Users\Flo\Desktop\jeu1\jeu\bin\Debug\joueur.xml");
            dataGridView1.DataSource = dataSet1;
            dataGridView1.DataMember = "Joueur";


bon sa doit pas vous impressionez mais je supose que avec mon datagridview je peux surment les ordonées mes scores du plus fort au plus faible en cliquant desus ?

C'est parfait et et mieux que se que je pouvais imaginer

En Tout cas ton aide ma été des plus précieuse sa fait plaisir d'apprendre finallement



lulu
0
Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 656
23 mars 2012 à 20:14
Ha je n'avais pas pensé au dataset, je ne m'en sers pas habituellement.

On est un peu partit dans toutes les directions, mais si au final ça te va tant mieux.

Whismeril
0
Rejoignez-nous