Salut tout le monde

J'ai une Form sur laquelle j'ai une DataGridView et un ComBoBox.

Le DataGridView est bindé à une DataTable via la propriété DataSource.
Certaines colonnes sont de type BOUND et d'autres de type UNBOUND.

L'affichage des résulats sur le DataGridView est basé sur le choix dans le Combobox dont les éléments (items) proviennent d'une autre DataTable.

Mon problème c'est que à chaque fois que je change la valeur du Combobox
les colonnes UNBOUND s'ajoutent automatiquement à coté des autres colonnes et se multiplient , j'ai essayé de changer l'événement lié au Combobox mais ça ne donne rien.

Voici ma base de donnée :

Niveaux(idniveau,libniveau)
Classes(idclasse,libclasse,#idniveau)
Eleves(ideleve,nom,prenom,age,....,#idclasse)
Matieres(idmat,libmat)
Trimestres(idtrim,libtrim,datedebut,datefin)
Evaluations(ideleve,idmat,idtrim,note,dev1,dev2,examen)

J'ai fait une requete multi-tables pour afficher la liste des élèves à coté des colonnes des notes pour les saisir en fait pour résumer le tout :

Le Combobox contient les noms des classes et pour chaque classe sélectionnée le DataGridView m'affiche la liste des élèves qui appartiennent à cette classe donc les colonnes BOUND sont : ideleve , nom , prenom et les colonnes UNBOUND sont : note , dev1 , dev2 , examen.

Je présume que vous allez dire mais pourquoi n'inclut-il pas les colonnes des notes car elles appartiennent à la table Evaluations ? La raison c'est à cause de la requete multi-tables SQL qui ne peut m'afficher les élèves que lorsqu'ils ont des notes , alors que moi je veux afficher la liste des élèves sans leurs notes car je vais les saisir ,voici ma requete :


Code : Sélectionner tout - Visualiser dans une fenêtre à part
Select e.idelv,e.nom,e.pren,d.libcla,m.libmat,t.libtrim,v.moyev,v.dev1,v.dev2,v.exam,v.moymat from eleves e,divisions d,matieres m,trimestres t,evals v where e.idelv=v.idelv and e.idcla=d.idcla and m.idmat=v.idmat and t.idtrim=v.idtrim and e.idcla='" & cbDiv.SelectedValue.ToString & "' and m.idmat='" & cbMat.SelectedValue.ToString & "' and t.idtrim='" & cbTrim.SelectedValue.ToString & "'




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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
Private Sub Form7_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
 
        FillCombo()
 
    End Sub
 
 
   Private Sub FillCombo()
 
        cn.ConnectionString = strcon
 
        Dim daDiv As New SqlDataAdapter("select idcla,libcla from divisions", cn)
        Dim dsNotes As New DataSet
        Dim dtDiv As New DataTable("divisions")
 
 
        If cn.State Then cn.Close()
 
        cn.Open()
 
        daDiv.Fill(dtDiv)
        cbDiv.DisplayMember = "libcla"
        cbDiv.ValueMember = "idcla"
        cbDiv.DataSource = dtDiv
        'cbDiv.SelectedIndex = 0
 
        cn.Close()
 
    Dim daMat As New SqlDataAdapter("select idmat,libmat from matieres", cn)
        Dim dtMat As New DataTable("matieres")
 
        If cn.State Then cn.Close()
 
        cn.Open()
 
        daMat.Fill(dtMat)
        cbMat.DisplayMember = "libmat"
        cbMat.ValueMember = "idmat"
        cbMat.DataSource = dtMat
        'cbMat.SelectedIndex = 0
 
        cn.Close()
 
  Dim daTrim As New SqlDataAdapter("select idtrim,libtrim from trimestres", cn)
        Dim dtTrim As New DataTable("trimestres")
 
        If cn.State Then cn.Close()
 
        cn.Open()
 
        daTrim.Fill(dtTrim)
        cbTrim.DisplayMember = "libtrim"
        cbTrim.ValueMember = "idtrim"
        cbTrim.DataSource = dtTrim
        'cbTrim.SelectedIndex = 0
 
        cn.Close()
 
        comflag = True
 
    End Sub
 
Private Sub cbDiv_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cbDiv.SelectedIndexChanged
 
        If comflag = True Then
 
  Dim str As String = "select e.idelv,e.nom,e.pren,d.libcla,m.libmat,t.libtrim,v.moyev,v.dev1,v.dev2,v.exam,v.moymat from eleves e,divisions d,matieres m,trimestres t,evals v where e.idelv=v.idelv and e.idcla=d.idcla and m.idmat=v.idmat and t.idtrim=v.idtrim and e.idcla='" & cbDiv.SelectedValue.ToString & "' and m.idmat='" & cbMat.SelectedValue.ToString & "' and t.idtrim='" & cbTrim.SelectedValue.ToString & "'"
 
            Dim daRes As New SqlDataAdapter(str, cn)
            Dim dsRes As New DataSet
            Dim dtres As New DataTable("evals")
 
            If cn.State Then cn.Close()
 
            cn.Open()
            daRes.Fill(dtres)
            cn.Close()
 
            dgvMoy.DataSource = dtres
            dgvMoy.ReadOnly = True
            dgvMoy.Columns(0).ReadOnly = True
            dgvMoy.Columns(0).HeaderText = "N° Eleve"
            dgvMoy.Columns(1).HeaderText = "Nom"
            dgvMoy.Columns(2).HeaderText = "Prénom"
 
 
            Dim txtboxmoyevalcolumn As New DataGridViewTextBoxColumn
 
                With txtboxmoyevalcolumn
                .HeaderText = "Note Evaluation"
                .Name = "note"
                End With
 
                ' Add the textbox column to the datagridview.
 
            dgvNotes.Columns.Insert(3, txtboxmoyevalcolumn)
 
                Dim txtboxdev1column As New DataGridViewTextBoxColumn
 
                With txtboxdev1column
                .HeaderText = "Devoir 1"
                .Name = "dev1"
                End With
 
            dgvNotes.Columns.Insert(4, txtboxdev1column)
 
                Dim txtboxdev2column As New DataGridViewTextBoxColumn
 
                With txtboxdev2column
                .HeaderText = "Devoir 2"
                    .Name = "dev2"
                End With
 
            dgvNotes.Columns.Insert(5, txtboxdev2column)
 
                Dim txtboxexamcolumn As New DataGridViewTextBoxColumn
 
                With txtboxexamcolumn
                .HeaderText = "Examen Final"
                    .Name = "exam"
                End With
 
            dgvNotes.Columns.Insert(6, txtboxexamcolumn)
 
 
        End If
 
    End Sub
Mon problème c'est qu' à chaque fois que je fais un choix depuis un des trois Combobox les colonnes UNBOUND s'ajoutent plusieurs fois ou se dupliquent et j'ai beau chercher sur le NET mais sans résultat , Merci d'avance