Vider une listbox en VB.NET
Lh
-
arion320 Messages postés 256 Statut Membre -
arion320 Messages postés 256 Statut Membre -
Bonjour et Merci de votre attention que vous porterez à mon égard !
Je suis novice en VB.NET sur Visual Basic et j’aimerai avoir votre aide sur ce problème svp !

Voici afficher les éléments liés à LOUHOU de la listbox1 dans la listbox2(Orange,Galette,Safou,Pulpe).
But : A chaque Double Clique sur un Nom de la Listbox1, J’aimerai afficher les marchandises qui lui sont liées puis, lors d’un nouveau Double clique sur un Nom, j’aimerai vider le contenu précédant de la listbox2, puis afficher les marchandises liées à ce nouveau Nom Double Cliqué.
Problème:
J’ai cherché sans trouver, mais j’ai comme même réussi à afficher les marchandises liées au Nom cliqué à chaque fois. Mais quand je clique encore sur un autre ou sur le même nom, les marchandises s’accumulent dans la listbox2,alors que je dois d'abord vider la listbox2 avant d'afficher les marchadises consernées par le nom Double cliqué.
Tentative: J'ai essayé de vider la listbox2 et j'ai obtenu une erreur disant que: DataSource is set. Donc je ne peux pas vider la listbox2 tant qu'il l'est. Svp j'en ai mare, aidez-moi. Alors que puis-je faire????
Voici mon Code en VB.NET :
Merci Beaucoup !
Je suis novice en VB.NET sur Visual Basic et j’aimerai avoir votre aide sur ce problème svp !

Voici afficher les éléments liés à LOUHOU de la listbox1 dans la listbox2(Orange,Galette,Safou,Pulpe).
But : A chaque Double Clique sur un Nom de la Listbox1, J’aimerai afficher les marchandises qui lui sont liées puis, lors d’un nouveau Double clique sur un Nom, j’aimerai vider le contenu précédant de la listbox2, puis afficher les marchandises liées à ce nouveau Nom Double Cliqué.
Problème:
J’ai cherché sans trouver, mais j’ai comme même réussi à afficher les marchandises liées au Nom cliqué à chaque fois. Mais quand je clique encore sur un autre ou sur le même nom, les marchandises s’accumulent dans la listbox2,alors que je dois d'abord vider la listbox2 avant d'afficher les marchadises consernées par le nom Double cliqué.
Tentative: J'ai essayé de vider la listbox2 et j'ai obtenu une erreur disant que: DataSource is set. Donc je ne peux pas vider la listbox2 tant qu'il l'est. Svp j'en ai mare, aidez-moi. Alors que puis-je faire????
Voici mon Code en VB.NET :
Imports System
Imports System.Data
Imports System.Data.OleDb
Public Class Form1
Private ObjetConnection As OleDbConnection
Private ObjetCommand As OleDbCommand
Private ObjetDataAdapter As OleDbDataAdapter
Private ObjetDataSet As New DataSet
Private N As Integer
Private M As String
Private strSql As String
Private ObjetDataTable As DataTable
Private ObjetDataRow As DataRow
Private RowNumber As Integer
Private strConn As String
Private ObjetCommandBuilder As OleDbCommandBuilder
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=C:\logiciel de reseaux pour TP\BaseActuelessai.mdb;"
strSql = "SELECT TableInfos .* FROM TableInfos"
ObjetConnection = New OleDbConnection
ObjetConnection.ConnectionString = strConn
ObjetConnection.Open()
ObjetCommand = New OleDbCommand(strSql)
ObjetDataAdapter = New OleDbDataAdapter(ObjetCommand)
ObjetCommand.Connection() = ObjetConnection
ObjetDataAdapter.Fill(ObjetDataSet, "TableInfos")
ListBox1.DataSource = ObjetDataSet.Tables("TableInfos")
ListBox1.DisplayMember = "Nom"
End Sub
Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged
ListBox1.DisplayMember = "Nom"
ListBox1.ValueMember = "NumeroInterne"
ListBox1.DataSource = ObjetDataSet.Tables("TableInfos")
RowNumber = ListBox1.SelectedValue
End Sub
Private Sub ListBox1_DoubleClick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.DoubleClick
strSql = "SELECT marchandises FROM ObjetsAchetés WHERE NombredAchat=" & ListBox1.SelectedValue & ""
ObjetConnection = New OleDbConnection
ObjetConnection.ConnectionString = strConn
ObjetConnection.Open()
ObjetCommand = New OleDbCommand(strSql)
ObjetDataAdapter = New OleDbDataAdapter(ObjetCommand)
ObjetCommand.Connection() = ObjetConnection
ObjetDataAdapter.Fill(ObjetDataSet, "ObjetsAchetés")
ListBox2.DataSource = ObjetDataSet.Tables("ObjetsAchetés")
ListBox2.DisplayMember = "marchandises"
End Sub
End Class
Merci Beaucoup !
A voir également:
- Vider une listbox en VB.NET
- Vider le cache d'une application - Guide
- Comment supprimer une page vide sur word - Guide
- Comment vider une clé usb - Guide
- Comment vider l'absorbeur d'encre canon pixma ? ✓ - Forum Imprimante
- Vider fichier temporaire windows - Guide
2 réponses
Bonjour
Essaye de mettre Nothing au datasource avant de le réaffecter.
Si ça ne marche pas je peux te proposer une solution en chargeant ta base de données dans une liste et en travaillant sur cette liste, car les bases de données je n'en utilises pas donc je ne serai pas de bons conseils.
Essaye de mettre Nothing au datasource avant de le réaffecter.
Si ça ne marche pas je peux te proposer une solution en chargeant ta base de données dans une liste et en travaillant sur cette liste, car les bases de données je n'en utilises pas donc je ne serai pas de bons conseils.
Bonjour,
Comme ceci:
Comme ceci:
ObjetDataSet.Clear ListBox2.Items.Clear()
Peut être
Mais
Cela suffit 9 fois sur 10, et comme la question a 2 mois, qu'il ne s'est jamais remanifesté, ben on peut supposer que cela a convenu.
ObjetDataSet.Clearcomme je l'avais indiqué initialement, je ne me sers jamais de bases de données, alors certaines fonctionnalités m'échappent.
Mais
ListBox2.Items.Clear()non, sauf si au milieu tu as repassé le datasource à Nothing, mais en faisant
ObjetDataAdapter.Fill(ObjetDataSet, "ObjetsAchetés")
ListBox2.DataSource = Nothing 'juste cette ligne plus
ListBox2.DataSource = ObjetDataSet.Tables("ObjetsAchetés")
ListBox2.DisplayMember = "marchandises"
Cela suffit 9 fois sur 10, et comme la question a 2 mois, qu'il ne s'est jamais remanifesté, ben on peut supposer que cela a convenu.
C'est ça ?
Dans ce cas on ne peut pas intervenir directement sur la collection Items.
D'ailleurs c'est ce qu'il a essayé e ce que dit le message d'erreur
Il faut agir sur la source de donnée.
Or quand on modifie le datasource il peut y avoir une sorte de "conflit de référence" (je ne sais pas si c'est la bonne expression, mais en gros le datasource conserve la référence initiale, qui ne pointe plus vers rien) donc forcer Nothing avant d'affecter une nouvelle référence est souvent la solution la plus simple.
Ça le fait aussi avec une requête Linq que l'on cast en List, Tableau ou Dictionnaire avec ToList(), ToArray() ou ToDictonnary,(), car ces méthodes créent une nouvelle référence.