IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

problème de ListBox et récupération de données


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 66
    Par défaut problème de ListBox et récupération de données
    Bonjour,

    Voici mon probleme:
    j'ai une ListBox qui affiche des Classes,
    Je voudrais pouvoir lors d'un clic récupérer l'objet Classe
    voici mon code:

    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
    Public Sub buildListBox()
    
            _classeManager = New ClasseManager()
    
            Try
                Me.lsbClasse.Items.Clear()
    
               // je récupère une liste de Classe
                Dim liste As List(Of Classe) = _classeManager.getClasse() 
             
                // pour chaque Classe je l'ajoute à la liste box
                For Each classe As Classe In liste
    
                    // le probleme est ici à chaque fois le Tag est écrasé par l'enregistrement suivant ce qui fait qu'a la fin le Tag = 4 (derniere classe)
                    lsbClasse.Tag = classe
                    lsbClasse.Items.Add(classe.Libelle)
                Next
            Catch ex As Exception
                Throw ex
            End Try
    
        End Sub
    ensuite pour récupérer mes infos je fais cela:

    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
     
    Private Sub lsbClasse_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lsbClasse.SelectedIndexChanged
     
            // je récupère la classe sélectionnée
            Dim selectedClasse As Classe
     
     
            Try
                If Me.lsbClasse.SelectedItem IsNot Nothing Then
     
                    selectedClasse = TryCast(Me.lsbClasse.Tag, Classe)
     
                    If selectedClasse IsNot Nothing Then
                        setClasse(selectedClasse, Me._classeManager)
                    Else
                        Me.txtLibelle.Text = ""
                    End If
                End If
     
            Catch ex As Exception
                MessageBox.Show(ex.Message, "Erreur")
     
            End Try
     
        End Sub
    Voyez-vous une solution ?
    Merci d'avance.

  2. #2
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 197
    Par défaut
    un control ne peut avoir qu'un tag, pas un par ligne

    de plus les controles .net utilisent la méthode ToString pour afficher des infos, il faut donc l'utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public class maclasse
        public property Id as long
        public property Libelle as string
        public overrides function ToString as string
            return me.libelle
        end sub
    end class
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    for each item as maclasse in mylistof
        listbox1.items.add(item) ' mettre l'instance plutot que la propriété libellé
    next
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    directcast(listbox1.selecteditem,maclasse) ' contient directement l'instance de la classe
    le listbox ne sachant pas afficher une classe va appeler .ToString qui dans ce cas va retourner le libellé
    et selecteditem contient l'instance, pas seulement le libellé, ce qui est pratique
    le but de la POO c'est de garder des instances partout plutot que des propriétés

    ca marche aussi pour les combobox
    et sur certains controles, on peut se débrouiller sans overrider la méthode tostring, grace à la propriété DisplayMember dans laquelle on met le nom de la propriété qu'on veut afficher
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 66
    Par défaut
    Merci pour cette explication claire et détaillée.

    Plus de problème maintenant.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2007] Problème récupèration de données dans listBox VBA
    Par paulob dans le forum Excel
    Réponses: 6
    Dernier message: 07/05/2015, 16h50
  2. Problème lors de la récupération des données
    Par hanadi. dans le forum Administration
    Réponses: 1
    Dernier message: 18/01/2010, 09h50
  3. Réponses: 1
    Dernier message: 27/07/2009, 09h20
  4. Listbox et récupération des données
    Par Amarth dans le forum Interfaces Graphiques
    Réponses: 3
    Dernier message: 09/05/2008, 15h44
  5. [MySQL] problème lors de la récupération des données à modifier mysql
    Par brajae85 dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 06/05/2008, 01h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo