Utilisation base de données access avec des listbox

midomar - 4 déc. 2012 à 23:56
 Utilisateur anonyme - 6 déc. 2012 à 19:04
Bonsoir,
J'ai rencontré un problème durant le développement de mon application VB.
J'ai un formulaire composé d'une lisBox principale où l'utilisateur doit sélectionner trois éléments préférés et trois éléments non préférés qu'il déplacera avec des boutons vers deux autres listbox, une pour chaque cas.
Au début avec des éléments que j'ai insérés dans la listbox principale manuellement, le formulaire fonctionne à merveille : aucun bug, aucune erreur.
J'ai changé de procédure, j'ai créé une base de données access à fin qu'elle remplace les éléments de la listbox. J'ai effectué toutes les opérations nécessaires : création d'un BindingSource, d'un dataSet et d'un adaptateur de table ; les données sont belle et bien insérées dans la listbox mais au moment du débogage de l'application, le message d'erreur suivant apparait quand j'appuie sur les boutons « Ajouterpreferes1 » et « AnnulerPreferes1 » où que je sélectionne un autre élément de la listbox:

[b]Une exception non gérée du type 'System.InvalidCastException' s'est produite dans Microsoft.VisualBasic.dll
Informations supplémentaires : La résolution de surcharge a échoué, car aucun '=' Public ne peut être appelé avec ces arguments :
'Public Shared Operator =(a As String, b As String) As Boolean':
L'argument qui correspond au paramètre 'a' ne peut pas être converti de 'DataRowView' en 'String'./b

J'ai beau faire des manipulations, rien ne change.
Veuillez m?aider s.v.p.
Je vous informe que je veux juste utiliser les données de la base de données access sans y modifier la moindre donnée.

Voici le code de mon formulaire:

Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Confirmer.Enabled = False
InfosFrut.Enabled = False
End Sub
Private Sub Label1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label1.Click

End Sub
Private Sub LstFrut_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles LstFrut.SelectedIndexChanged
If LstFrut.Items.Count = 4 Then
Confirmer.Enabled = True
End If
If LstFrut.SelectedIndex >= 0 Then
InfosFrut.Enabled = True
End If
If LstFrut.SelectedItem = String.Empty Then
InfosFrut.Enabled = False
End If
End Sub

Private Sub InfosFrut_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles InfosFrut.Click
Form2.Show()
End Sub

Private Sub AjouterPreferes1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles AjouterPreferes1.Click
If LstFrut.SelectedItem = String.Empty Then
MessageBox.Show("Veuillez selectionner un élément de la liste de droite")
Else
LstPreferes1.Items.Add(LstFrut.SelectedItem)
LstFrut.Items.Remove(LstFrut.SelectedItem)
End If
If LstPreferes1.Items.Count = 3 Then
AjouterPreferes1.Enabled = False
End If
End Sub

Private Sub AnnulerPreferes1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles AnnulerPreferes1.Click
If LstPreferes1.SelectedItem = String.Empty Then
MessageBox.Show("Veuillez selectionner un élément de la liste de gauche")
Else
LstFrut.Items.Add(LstPreferes1.SelectedItem)
LstPreferes1.Items.Remove(LstPreferes1.SelectedItem)
End If
If LstPreferes1.Items.Count <= 2 Then
AjouterPreferes1.Enabled = True
End If
End Sub

Private Sub AjouterNonpreferes1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles AjouterNonpreferes1.Click
If LstFrut.SelectedItem = String.Empty Then
MessageBox.Show("Veuillez selectionner un élément de la liste à droite")
Else
LstNonPreferes1.Items.Add(LstFrut.SelectedItem)
LstFrut.Items.Remove(LstFrut.SelectedItem)
End If
If LstNonPreferes1.Items.Count = 3 Then
AjouterNonpreferes1.Enabled = False
End If
End Sub

Private Sub AnnulerNonPrefere1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles AnnulerNonPrefere1.Click
If LstNonPreferes1.SelectedItem = String.Empty Then
MessageBox.Show("Veuillez selectionner un élément de la liste de gauche")
Else
LstFrut.Items.Add(LstNonPreferes1.SelectedItem)
LstNonPreferes1.Items.Remove(LstNonPreferes1.SelectedItem)
End If
If LstNonPreferes1.Items.Count <= 2 Then
AjouterNonpreferes1.Enabled = True
End If
End Sub
Private Sub Label2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label2.Click

End Sub
Private Sub LstPreferes1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles LstPreferes1.SelectedIndexChanged
If LstPreferes1.Items.Count <= 2 Then
Confirmer.Enabled = False
End If
End Sub
Private Sub Label3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label3.Click

End Sub
Private Sub LstNonPreferes1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles LstNonPreferes1.SelectedIndexChanged
If LstNonPreferes1.Items.Count <= 2 Then
Confirmer.Enabled = False
End If
End Sub

Private Sub Confirmer_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Confirmer.Click
Form3.Show()
Me.Hide()
End Sub
End Class

Merci d'avance

7 réponses

Utilisateur anonyme
5 déc. 2012 à 00:54
Bonsoir,

Merci d'utiliser la balise de coloration de code (3ème depuis la droite).

1 - Il devient urgent dans ton code d'activer Option Strict dans les propriétés de ton projet.

2 - Plutôt que de surcharger l'opérateur '=' il serait plus judicieux d'utiliser la fonction String.Equals (à consulter sur msdn) pour comparer a et b.
0
Utilisateur anonyme
5 déc. 2012 à 04:31
Bonjour,

Je n'ai pas envie de m'arracher les yeux avec ton code illisible. Ajoute .tostring au bout de la ligne où tu récupères ton a et ton b
0
Bonjour,
Merci pour tes conseils banana32.
J'ai fait ce que tu m?as proposé, j'ai corrigé le code après avoir activé l'option strict. Aucune erreur avec l'utilisation d'une collection manuelle dans la listbox.
Mais, avec l'utilisation des données d'une BD acces, il y?a encors des problèmes. Les items sont chargés dans la listbox mais une fois que j'exécute le bouton"AjouterPreferes1" ou le bouton « AjouterNonPreferes1 » le message d'erreur suivant apparait :

[i]Une exception non gérée du type 'System.ArgumentException' s'est produite dans System.Windows.Forms.dll
Informations supplémentaires : Impossible de modifier la collection d'éléments lorsque la propriété DataSource est définie.
/i

Il m?affiche cette erreur tout en surlignant la ligne de code suivante :

LstFrt1.Items.Remove(LstFrt1.SelectedItem)


Je m?excuse pour la coloration du code, le voici après avoir effectué quelques modifications :

Public Class Form1
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        'TODO: cette ligne de code charge les données dans la table 'Bdd_monapplicationDataSet1.ListesFrut_FRT'. Vous pouvez la déplacer ou la supprimer selon vos besoins.
        Me.ListesFrut_FRTTableAdapter.Fill(Me.Bdd_monapplicationDataSet1.ListesFrut_FRT)
        Confirmer.Enabled = False
        InfoFrt.Enabled = False
        AnnulerPreferes1.Enabled = False
        AnnulerNonPrefere1.Enabled = False
    End Sub
    Private Sub Label1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label1.Click

    End Sub
    Private Sub LstFrt1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles LstFrt1.SelectedIndexChanged
        If LstFrt1.Items.Count = 4 Then
            Confirmer.Enabled = True
        End If
        If LstFrt1.SelectedIndex >= 0 Then
            InfoFrt.Enabled = True
        End If
    End Sub

    Private Sub InfoFrt_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles InfoFrt.Click
        Form2.Show()
    End Sub

    Private Sub AjouterPreferes1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles AjouterPreferes1.Click
        If LstFrt1.SelectedIndex >= 0 Then
            LstPreferes1.Items.Add(LstFrt1.SelectedItem)
            LstFrt1.Items.Remove(LstFrt1.SelectedItem)
        Else
            MessageBox.Show("Veuillez selectionner un élément de le liste de droite")
        End If
        If LstFrt1.SelectedIndex < 0 Then
            InfoFrt.Enabled = False
        End If
        If LstPreferes1.Items.Count >= 1 Then
            AnnulerPreferes1.Enabled = True
        End If
        If LstPreferes1.Items.Count = 3 Then
            AjouterPreferes1.Enabled = False
        End If
    End Sub

    Private Sub AnnulerPreferes1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles AnnulerPreferes1.Click
        If LstPreferes1.SelectedIndex >= 0 Then
            LstFrt1.Items.Add(LstPreferes1.SelectedItem)
            LstPreferes1.Items.Remove(LstPreferes1.SelectedItem)
        Else
            MessageBox.Show("Veuillez selectionner un élément de la liste de gauche")
        End If
        If LstPreferes1.Items.Count <= 2 Then
            AjouterPreferes1.Enabled = True
        End If
    End Sub

    Private Sub AjouterNonpreferes1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles AjouterNonpreferes1.Click
        If LstFrt1.SelectedIndex >= 0 Then
            LstNonPreferes1.Items.Add(LstFrt1.SelectedItem)
            LstFrt1.Items.Remove(LstFrt1.SelectedItem)
        Else : MessageBox.Show("Veuillez selectionner un élément de le liste de droite")
        End If
        If LstFrt1.SelectedIndex < 0 Then
            InfoFrt.Enabled = False
        End If
        If LstNonPreferes1.Items.Count >= 1 Then
            AnnulerNonPrefere1.Enabled = True
        End If
        If LstNonPreferes1.Items.Count = 3 Then
            AjouterNonpreferes1.Enabled = False
        End If
    End Sub

    Private Sub AnnulerNonPrefere1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles AnnulerNonPrefere1.Click
        If LstNonPreferes1.SelectedIndex >= 0 Then
            LstFrt1.Items.Add(LstNonPreferes1.SelectedItem)
            LstNonPreferes1.Items.Remove(LstNonPreferes1.SelectedItem)
        Else
            MessageBox.Show("Veuillez selectionner un élément de la liste de gauche")
        End If
        If LstNonPreferes1.Items.Count <= 2 Then
            AjouterNonpreferes1.Enabled = True
        End If
    End Sub
    Private Sub Label2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label2.Click

    End Sub
    Private Sub LstPreferes1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles LstPreferes1.SelectedIndexChanged
        If LstPreferes1.Items.Count <= 2 Then
            Confirmer.Enabled = False
        End If
        If LstPreferes1.Items.Count = 0 Then
            AnnulerPreferes1.Enabled = False
        End If
    End Sub
    Private Sub Label3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label3.Click

    End Sub
    Private Sub LstNonPreferes1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles LstNonPreferes1.SelectedIndexChanged
        If LstNonPreferes1.Items.Count <= 2 Then
            Confirmer.Enabled = False
        End If
        If LstNonPreferes1.Items.Count = 0 Then
            AnnulerNonPrefere1.Enabled = False
        End If
    End Sub

    Private Sub Confirmer_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Confirmer.Click
        Form3.Show()
        Me.Hide()
    End Sub
End Class
0
Utilisateur anonyme
6 déc. 2012 à 13:21
Tu as une réponse ici.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
En fait, je ne veux pas effacer tous les items de la listbox mais juste les items sélectionnés
0
Utilisateur anonyme
6 déc. 2012 à 18:23
C'est pas bien, tu n'as pas lu le sujet en entier. Reprenons ...
On y lit ce ceci:
'Vous ajoutez le code suivant à l'événement Button1 Click ::.

 Me.ListBox1.DataSource = Nothing

'Pour gérer l'événement DataSourceChanged pour ListBox1, ajoutez le code 'suivant au code Form1 :

Private Sub ListBox1_DataSourceChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ListBox1.DataSourceChanged
    'code de suppression des items selectionnés ici
    '...
End Sub
0
Utilisateur anonyme
6 déc. 2012 à 19:04
Par précaution, met quand même un test :
If listbox1.datasource is nothing then

afin d'éviter de supprimer les données lorsque tu ré-affecteras ton datasource
0
Rejoignez-nous