Récupération de données avec Windows Forms

Bonjour,

Je suis en train de développer une application sur Windows Forms comprenant de la sauvegarde données sur fichiers ini.
Ces fichiers contiennent des fiches de personnages (nom, age, caractéristiques etc.).
J'aimerai dans un Form, récupérer ces données afin que les noms et prénoms soient affichées dans une listview.

Avez-vous une idée pour y arriver ?

Merci d'avance,

Stapled

2 réponses

  1. Bonsoir, un fichier ini c'est désuet et ça servait à sauvegarder la configuration du logiciel, pas les données métiers.
    Pour la configuration du logiciel, Visual Studio intègre directement un fichier spécifique (au format xml),
    vois ici
    https://cdiese.fr/fichier-de-configuration-en-net-en-10-min/
    ou là
    https://nico-pyright.developpez.com/tutoriel/vc2005/configurationsectioncsharp/

    Pour les données métiers, c'est dans une base de données qu'il faut les stocker, tu peux la constituer avec un fichier texte (csv, xml, json...) si tu as peu de données. Tu peu aussi utiliser excel. Enfin tu peux te servir d'une "vraie" base de données (Access, sqlserver, mysql etc...).

    Pour le xml, ma préférence va à LinqToXml https://codes-sources.commentcamarche.net/faq/11196-linq-to-xml-c-et-vb-net
    Pour Excel, tu peux te servir de l'API https://codes-sources.commentcamarche.net/source/50624-piloter-excel-via-microsoft-office-interop-excel mais ça oblige à disposer d'Excel sur le PC et c'est un peu long à l'exécution car tu lances excel et tu le pilotes pas à pas. Sinon tu peux écrire directement en openxml pour le format xlxs https://codes-sources.commentcamarche.net/source/102062-excel-avec-openxml

    Pour les bases de données, il y a des exemples sur le site
    https://codes-sources.commentcamarche.net/source/list/c-net-13/last

    1. Bonsoir,

      Je suis conscient que les fichiers ini sont désuets mais j'aimerai quand même savoir comment afficher certaines données enregistrées dans un fichier ini dans une listview.
    2. De la même façon que n’importe quel fichier texte.
      Mais pour te montrer, il faudrait un exemple de ton fichier
    3. Oui bien sûr :

      (c'est du jeu de rôle)
    4. T’aurais pu copier coller le texte, ça m’aurait évité de devoir le retaper de mon côté
    5. Désolé
  2. Avec ce fichier
    [Personnage]
    Nom=Organ
    Prenom=Stapled
    Race=Humain
    Age=42
    Description=
    Arme=
    Classe=Sorcier
    Male=Femelle
    Femme=Male
    Autre=Autre
    [Personnage]
    Nom=Toto
    Prenom=Tata
    Race=Elfe
    Age=275
    Description=Très beau
    Arme=Epée
    Classe=Guerrier
    Male=Male
    Femme=Femelle
    Autre=N'importe quoi


    Je ne sais pas comment tu as écrit ta classe Personnage alors j'ai fait un truc bateau, y'a un int et un enum pour l'exemple

        class PersonnageStapled
        {
            public string Nom { get; set; }
    
            public string Prenom { get; set; }
    
            public string Race { get; set; }
    
            public int Age { get; set; }
    
            public string Description { get; set; }
    
            public string Arme { get; set; }
    
            public Classe Classe { get; set; }
    
            public string Sexe { get; set; }
    
            public string Conjoint { get; set; }
    
            public string Autre { get; set; }
    
    
            public override string ToString()
            {
                return string.Format("Je m'appelle {0} {1}", Nom, Prenom);
            }
    
            public static List<PersonnageStapled> LireIni(string FileName)
            {
                List<PersonnageStapled> lesPersos = new List<PersonnageStapled>();
    
                //J'utilise une méthode pas forcément optimisée mais accessible pour un débutant
                string toutLeTexte = File.ReadAllText(FileName);//je charge tout le fichier
                string[] persos = toutLeTexte.Split(new[] { "[Personnage]\r\n" },StringSplitOptions.RemoveEmptyEntries);//je découpe le texte par le mot clé personnage
    
                foreach(string perso in persos)//j'itère chaque personnage
                {
                    string[] lesLignes = perso.Split(new[] { "\r\n" }, StringSplitOptions.None);//je découpe par ligne
    
                    //je pars du principe que le fichier est toujours parfaitement bien formaté (c'est l'un des inconvenients de ce format...)
                    PersonnageStapled nouveauPerso = new PersonnageStapled();
                    nouveauPerso.Nom = lesLignes[0].Split('=')[1];//je découpe par le = et je prends le 2eme
                    nouveauPerso.Prenom = lesLignes[1].Split('=')[1];
                    nouveauPerso.Race = lesLignes[2].Split('=')[1];
                    nouveauPerso.Age = Convert.ToInt32(lesLignes[3].Split('=')[1]);//il faut convertir en int
                    nouveauPerso.Description = lesLignes[4].Split('=')[1];
                    nouveauPerso.Arme = lesLignes[5].Split('=')[1];
                    nouveauPerso.Classe = (Classe)Enum.Parse(typeof(Classe), lesLignes[6].Split('=')[1]);//il faut convertir en Classe
                    nouveauPerso.Sexe = lesLignes[7].Split('=')[1];
                    nouveauPerso.Conjoint = lesLignes[8].Split('=')[1];
                    nouveauPerso.Autre = lesLignes[9].Split('=')[1];
    
                    lesPersos.Add(nouveauPerso);
                }
    
                return lesPersos;
            }
        }
    
        enum Classe
        {
            Sorcier,
            Guerrier
        }


    Et dans le formulaire, pour afficher sur une listBox
    listBox1.DataSource = PersonnageStapled.LireIni("test.ini");

    1. Bonjour,

      Désolé pour avoir tardé à répondre. Je vous remercie pour votre aide, je vais essayer de faire fonctionner ce code avec mon application.

      Mon fichier ini a été construit de cette manière :

      private void button1_Click(object sender, EventArgs e)
              {
                  textBox1.Text = textBox1.Text;
                  comboBoxclasse.Items.Add(comboBoxclasse.Text);
      
                  int N_ident;// n° du fichier
      
      
                  do
                  {
                      N_ident = (new Random()).Next(0, 9999999);
      
                  }
                  while (File.Exists(Application.StartupPath + @"\personnage\" + N_ident.ToString() + ".ini"));
                  Ini Data = new Ini(Application.StartupPath + @"\personnage\" + N_ident.ToString() + ".ini");
      
                  Data.Write("Personnage", "Nom", textBox1.Text);
                  Data.Write("Personnage", "Prenom", textBox2.Text);
                  Data.Write("Personnage", "Race", textBox4.Text);
                  Data.Write("Personnage", "Age", textBox3.Text);
                  Data.Write("Personnage", "Description", textBox5.Text);
                  Data.Write("Personnage", "Arme", comboBox2.Text);
                  Data.Write("Personnage", "Classe", comboBoxclasse.Text);
                  Data.Write("Personnage", "Male", radioButton1.Text);
                  Data.Write("Personnage", "Femme", radioButton2.Text);
                  Data.Write("Personnage", "Autre", radioButton3.Text);
                
      
      
                  Close();
      
              }
      
    2. C’est quoi ce do?
      Pour trouver le premier nombre disponible?
    3. Oui c'est ça
    4. et ta classe ini elle sort d'ou?
    5. Elle provient d'une autre page .cs intitulée IniParser.cs
      Elle est lié à l'autre page avec un using.