IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

[DEBUTANT]XML & DataGridView petit probleme.


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 39
    Par défaut [DEBUTANT]XML & DataGridView petit probleme.
    Bonjour toutes et a tous !

    Voila je suis debutant et j'ai un petit soucis avec le xml et les datagrid
    j'aimerai afficher le contenu de mon fichier xml dans un datagrid mais j'ai ce message d'erreur :

    "L'execption NullReferenceException n'a pas été gérée
    La référence d'objet n'est pas définie à une instance d'un objet."

    à la ligne que je vous ai mis en gras.

    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
    private void Form1_Load(object sender, EventArgs e)
            {
                XmlDocument xmlDoc = new XmlDocument();
                xmlDoc.Load("sample.xml");
    
                XmlNodeList xmlName = xmlDoc.GetElementsByTagName("name");
                XmlNodeList xmlContact = xmlDoc.GetElementsByTagName("contatcnumber");
                XmlNodeList xmlEmail = xmlDoc.GetElementsByTagName("email");
    
                dataGridView1.Columns.Add("Name", "Name");
                dataGridView1.Columns.Add("Contact Number", "Contact Number");
                dataGridView1.Columns.Add("Email", "Email");
                int i = 0;
    
                while (i < xmlName.Count)
                {
                    object[] data = {(object)xmlName.Item(i).InnerText, (object)xmlContact.Item(i).InnerText, (object)xmlEmail.Item(i).InnerText };
                    dataGridView1.Rows.Add(data);
                    i++;
                }
            }
    je vous remerci par avance de votre aide !

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Euh... ta façon d'analyser le fichier XML me parait un peu hasardeuse ! tu peux montrer la structure du fichier ?

    Sinon, vu que string hérite de object (comme toutes les classes d'ailleurs), pas la peine de faire un cast de InnerText en object...

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 39
    Par défaut
    Merci de ta reponse !

    Voici mon fichier xml :

    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
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <company>
    	<employee>
    		<name>John Doe</name>
    		<contactnumber>555-5656</contactnumber>
    		<email>johndoe@mail.com</email>
    	</employee>
    	<employee>
    		<name>Sue Baily</name>
    		<contactnumber>555-5124</contactnumber>
    		<email>suebaily@mail.com</email>
    	</employee>
    	<employee>
    		<name>Tom Baker</name>
    		<contactnumber>555-9867</contactnumber>
    		<email>tombaker@mail.com</email>
    	</employee>
    	<employee>
    		<name>Jane Smith</name>
    		<contactnumber>555-1167</contactnumber>
    		<email>janesmith@mail.com</email>
    	</employee>
    </company>

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    OK...
    Je vois pas trop ce qui pose problème, mais en tous cas tu devrais modifier ta façon d'accéder aux éléments... suppose par exemple, que l'élément <email> soit manquant pour un des employés : dans ce cas tu n'auras plus le même nombre d'éléments dans xmlName et xmlEmail, et tout sera décalé à partir de cet employé... Il vaudrait mieux travailler par rapport à l'élément <employee>, et récupérer les infos de chaque employé à partir de l'élément employee correspondant.

    Sinon, personnellement j'aurais plutôt adopté une autre méthode, en utilisant la sérialisation XML...
    • Tu définis une classe qui correspond à company, et une autre qui correspond à employee, en mettant des attributs de sérialisation pour que ça corresponde au schéma XML :
      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
       
      ...
      using System.Xml.Serialization;
      ...
       
      [XmlRoot("employee")]
      public class Employee
      {
          [XmlElement("name")]
          public string Name { get; set; }
          [XmlElement("contact")]
          public string Contact { get; set; }
          [XmlElement("email")]
          public string Email { get; set; }
      }
       
      [XmlRoot("company")]
      public class Company
      {
          public Company()
          {
              this.Employees = new List<Employee>();
          }
       
          [XmlElement("employee")]
          public List<Employee> Employees { get; private set; }
      }
    • Tu désérialises le fichier pour obtenir un objet Company :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      XmlSerializer xs = new XmlSerializer(typeof(Company));
      Company comp = null;
      using (StreamReader rd = new StreamReader("sample.xml"))
      {
          comp = xs.Deserialize(rd) as Company;
      }
    • Et tu affectes le résultat à la DataSource du DataGridView :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      dataGridView1.DataSource = comp.Employees;

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 39
    Par défaut
    Merci de ta reponse, merci de m'avoir consacré du temps !
    Etant debutant en c# et encore plus en c# combiné au XML
    je vais me renseigner un peu plus sur ce qu'est la serialisation!

    Encore Merci !

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 39
    Par défaut
    Me revoilà.. a propos de la sérialisation.

    Après quelque recherche j'ai pu comprendre un peu le principe mais je n'ai pas trouvé d'exemple reflétant vraiment mon projet ce qui me pose quelques soucis pour me lancer...

    J'aimerai savoir comment je dois structuré mes classes de mon fichier XML

    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
    29
    30
    31
    32
     
    <projets>
    	<projet>
    	<titre></titre>
    	<status></status>
    	<priorite></priorite>
    	<budget></budget>
    	<description></description>
    		<taches>
    			<tache>
    				<nom></nom>
    				<description></description>
    				<status></status>
    				<priorite></priorite>
    				<duree></duree>
    				<equipe></equipe>
    				<cout></cout>
    				<sousTraitant></sousTraitant>
    			</tache>
    			<tache>
    				<nom></nom>
    				<description></description>
    				<status></status>
    				<priorite></priorite>
    				<duree></duree>
    				<equipe></equipe>
    				<cout></cout>
    				<sousTraitant></sousTraitant>
    			</tache>
    		</taches>
    	</projet>
    </projets>
    Si quelqu'un pouvais me montrer comment structurer mes classes sa serait super.
    Ce qui me pose reelement problème c'est au niveau des nœuds suivant :
    <projets>
    -----<projet>
    ---------<taches>
    --------------<tache>

    Je vous remercie grandement d'avance !

Discussions similaires

  1. [DEBUTANT] CheckedListBox alimenté par XML (petit probleme)
    Par erigoal dans le forum Windows Forms
    Réponses: 7
    Dernier message: 12/02/2009, 23h06
  2. [DEBUTANT] Petit probleme
    Par ChRom dans le forum Débuter
    Réponses: 10
    Dernier message: 16/01/2007, 15h17
  3. [Débutant] Petit problème pour calcul de somme
    Par kriskikout dans le forum Ada
    Réponses: 4
    Dernier message: 04/11/2006, 06h47
  4. Petit problème avec XML et WinDev
    Par MicaelFelix dans le forum WinDev
    Réponses: 1
    Dernier message: 18/09/2006, 16h26
  5. petit probleme de debutant
    Par etudiant72 dans le forum Débuter
    Réponses: 5
    Dernier message: 10/03/2006, 21h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo