Bonjour à tous.
Il y à peut de temps, j'avais posté sur le forum une demande d'aide pour lire une liste dans un fichier de plusieurs liste et savoir où s’arrêter pour interpréter les différentes listes. Exemple : dans mon fichier j'ai
"Liste 1
argument 1
argument 2
etc...
Fin liste 1

Liste 2 :
Argument 1
etc...
Fin liste 2

etc...
"
Sachant qu'à la fin des arguments d'une liste, je n'avais pas "fin de liste X" mais bien "argument X".

On m'à alors redirigé vers une solution bien plus simple : un fichier XML.
Je ne connaissait pas du tout alors j'ai essayé de comprendre les exemples qu'on me donnait et à force de bidouiller et lire relire et l’exécution en pas à pas de visual studio 2013, j'ai compris a peut près ce que je faisait.

Seulement j'ai d'autres problèmes qui s'offrent à moi à présent.

Voici mon code, je vous explique après. (ps : si trop compliqué vous pouvez me mp j'essayerais de clarifier les choses.)

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
33
34
35
36
37
Structure Elève
    Dim nom As String
    Dim prenom As String
    Dim classe As String
    Dim devoirs As String
    Dim exercice As String
    Dim note() As Integer
End Structure
 
<XmlRoot("lesclasses")>
Public Class LesClasses
    <XmlElement("classe")>
    Public Property Classes As New List(Of Classe)
End Class
 
Public Class Classe
    <XmlAttribute("nomclasse")>
    Public Property Classe As String = ""
    <XmlElement("eleve")>
    Public Property Eleves As New List(Of Eleve)
End Class
 
Public Class Eleve
    <XmlAttribute("nom")>
    Public Property Nom As String = ""
    <XmlAttribute("prenom")>
    Public Property Prenom As String = ""
    <XmlElement("devoir")>
    Public Property Devoirs As New List(Of Devoir)
End Class
 
Public Class Devoir
    <XmlAttribute("exercice")>
    Public Property Exercice As String = ""
    <XmlAttribute("note")>
    Public Property Note As Integer = 0
End Class
ceci est la partie des classes du fichier XML. (j'ai rajouter une structure pour réaliser un tableau des élèves présent dans mon fichier). Judicieux ?? Pour moi il existe plus simple je pense que c'est de la bidouille. J'attends vos commentaires/critiques/aide.

Ensuite la partie lecture 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
Private Function LitDataXMLClasses(ByVal filename As String) As LesClasses
        Try
            Using objStreamReader As New IO.StreamReader(filename)
                Try
                    Return DirectCast((New Xml.Serialization.XmlSerializer(GetType(LesClasses))).Deserialize(objStreamReader), LesClasses)
                Catch ex As Exception
                    MessageBox.Show("Echec de la lecture." & ex.Message)
                End Try
            End Using
        Catch ex As Exception
            MessageBox.Show("Fichier inaccessible." & ex.Message)
        End Try
        Return Nothing
    End Function
Rien a rajouter je pense.

Et là : la seconde partie qui me pose problème :

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
Dim Classesel(compteur_el) As Elève
    Dim compteur_el As Integer = 0
    Dim compteur_dev As Integer = 0
    Dim Data As LesClasses = LitDataXMLClasses("classes.xml")
 
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        For Each cl As Classe In Data.Classes
            For Each el As Eleve In cl.Eleves
                Classesel(compteur_el).nom = el.Nom
                Classesel(compteur_el).prenom = el.Prenom
                ComboBox1.Items.Add(Classesel(compteur_el).nom & " " & Classesel(compteur_el).prenom)
                Classesel(compteur_el).classe = cl.Classe
                For Each no As Devoir In el.Devoirs
                    Classesel(compteur_el).note(compteur_dev) = no.Note
                Next
                compteur_el += 1
                ReDim Preserve Classesel(compteur_el)
            Next
        Next
    End Sub
Lors du chargement de ma page donc, je vais lire le fichier XML et j'ajoute les noms des élèves dans une combobox.
Là ou j'ai un problème c'est à cette ligne : "Classesel(compteur_el).note(compteur_dev) = no.Note"
un tableau dans un tableau ça ne prends pas.
J'ai alors pensé à créer un autre tableau portant le même numéro que chaque élèves dans lequel je rajouterais les notes. Encore de la bidouille.
Je n'ai pas compris pourquoi je ne peux pas creer un tableau de notes dans mon tableau d’élèves. Il me met ce message d'erreur :
"Une exception non gérée du type 'System.NullReferenceException' s'est produite dans Bidouille XML.exe
Informations supplémentaires : La référence d'objet n'est pas définie à une instance d'un objet." sur ma ligne. Si j'enlève le tableau j'ai qu'une note et ça fonctionne.

Voila. En gros j'aimerais optimiser tout ça et comprendre pourquoi je ne peux pas créer mon tableau de notes dans mon tableau d'élèves.
Merci.