Bonsoir

J'ai une question surement simple sur comment vider une listbox

J'ai une première listbox qui se remplie avec un dataset, et lorsque je sélectionne un élément de cette listbox cela remplie une deuxième listbox (même procédé, requête sur un dataset)

J'ai essayé d'utiliser la fonction clear, remove, ca me vide bien la deuxième listbox en visuel (en ayant bien sur paramétrer le datasource sur nothing)

mais lorsque je sélectionne un élément sur la première listbox tout les éléments réapparaissent et s'accumulent

Je ne souhaite volontairement pas passer par un bouton (sauf mis a part pour test) pour garder une navigation plus rapide sur le soft

Mon code:

Remplissage de la première listbox

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
Private Sub Categories_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
 
        strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source= data.mdb;"
        strSql = "SELECT [code type], type FROM [2-RUBRIQUES_locale] WHERE [code gamme] = " & Me.Label1.Text
        ObjetConnection = New OleDbConnection
        ObjetConnection.ConnectionString = strConn
        ObjetConnection.Open()
        ObjetCommand = New OleDbCommand(strSql)
        ObjetDataAdapter = New OleDbDataAdapter(ObjetCommand)
        ObjetCommand.Connection() = ObjetConnection
        ObjetDataAdapter.Fill(ObjetDataSet, "[2-RUBRIQUES_locale]")
        ObjetDataTable = ObjetDataSet.Tables("[2-RUBRIQUES_locale]")
        ListBox1.DisplayMember = "type"
        ListBox1.ValueMember = "code type"
        ListBox1.DataSource = ObjetDataSet.Tables("[2-RUBRIQUES_locale]")
        ObjetConnection.Close()
 
    End Sub
Remplissage de la deuxième listbox:

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
    Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged
 
        If ListBox1.SelectedIndex <> -1 Then
 
            strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source= data.mdb;"
            strSql = "SELECT [code type1], [code type2], type FROM [2-RUBRIQUES2_locale] WHERE [code type2] = " & ListBox1.SelectedValue.ToString
            ObjetConnection = New OleDbConnection
            ObjetConnection.ConnectionString = strConn
            ObjetConnection.Open()
            ObjetCommand = New OleDbCommand(strSql)
            ObjetDataAdapter = New OleDbDataAdapter(ObjetCommand)
            ObjetCommand.Connection() = ObjetConnection
            ObjetDataAdapter.Fill(ObjetDataSet, "[2-RUBRIQUES2_locale]")
            ObjetDataTable = ObjetDataSet.Tables("[2-RUBRIQUES2_locale]")
            ListBox2.DisplayMember = "type"
            ListBox2.ValueMember = "code type1"
            ListBox2.DataSource = ObjetDataSet.Tables("[2-RUBRIQUES2_locale]")
            ObjetConnection.Close()
 
        End If
    End Sub
Fonction pour vider la listbox2, je l'ai placer sur un bouton pour le moment:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
 
Me.ListBox2.DataSource = Nothing
        ListBox2.Items.clear()
        ListBox2.Refresh()
 
    End Sub
End Class
Est ce que je dois vider le dataset? vu que la requête est rappelée a chaque sélection d'un élément sur la listbox1.

Merci d'avance