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

Windows Forms Discussion :

[VB.NET] ListBox lié un element a une clé


Sujet :

Windows Forms

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2003
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juillet 2003
    Messages : 197
    Points : 115
    Points
    115
    Par défaut [VB.NET] ListBox lié un element a une clé
    Donc pour etre clair et concis :

    J'ai une listbox listant des clients.

    ceux ci sont récupérer d'une base de donnée ainsi que la clé primaire qui les lie (Table CLIENT : Identifiant, nom)

    maintenant j'aimerais donc envoyer dans ma list box le nom du client et garder en memoire dans le list box la clé primaiure de facon a eviter d'aller la rechercher dans la base.

    J'ai chercher sur le forum et j'avais trouvé uhn truc qui me paraissait pas mal et qui disait que items.add prenait n'importe quoi.

    Du coup j'ai envoyer une arraylist dans items.add (en bouclant sur les elements de l'arraylist)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     arrayclient = classclient._lst_client
    For i = 0 To arrayclient.Count - 1
                Dim newitem As New class_client()
                newitem = arrayclient(i)
                lst_client.Items.Add(newitem)
            Next
    du coup dans la liste il affiche gest_admin.class_client.

    Je pensais trouver moult post traitant de ce sujet mais malgré cela je n'ai rien trouvé. (malgré une recherche bien généraliste en utilisant listbopx comme mot clé et d'autres r'echerches dont je me souviens plus)

    Maintenant j'ai bien une idée pour feinter qui serait d'utiliser la listbox en multicolonne puis de rendre invisible la colonne identifiant mais n'existe t il pas des propriétés de listbox qui rendrait le code plus élégant

    voila je vous remercie d'avance de l'aide que vous m'apporterez

    @+

    Hirochirak
    -- Se lance dans l'asp.net 2.0 --

    Made In Taïwan

  2. #2
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2003
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juillet 2003
    Messages : 197
    Points : 115
    Points
    115
    Par défaut
    Bon je suis toujours devant cet épineux probleme.

    Du coup j'ai encore fais moult recherche et j'ai trouvé un truc qui me parait interessant mais ca fait couiner VS.NET

    Une listbox a comme propriétés displaymember et valuemember

    Du coup j'ai essayer d'utiliser ces propriétés ainsi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim classclient As New class_client()
            Dim i As Integer
            Dim dataclient As New DataSet()
            dataclient = classclient.listeclient
            lst_client.DataSource = dataclient
            lst_client.DisplayMember = "nom"
            lst_client.ValueMember = "id"
    sachant que mon dataset est construit ainsi une colonne pour les noms ("name") et une colonne pour les identifiants ("id") grace a la requete sql (dans laquelle je mets des alias pour les colonnes)

    pourriez vous m'expliquer comment fonctionne displaymember et datamember et j'essaierai de vous donner le msg d'erreur des que possible

    @+

    Hirochirak
    -- Se lance dans l'asp.net 2.0 --

    Made In Taïwan

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 52
    Points : 48
    Points
    48
    Par défaut
    Il y a plus simple que ca !!

    Les objets dotNET ont une propriété super interressante !! la propriété DataSource !

    Par exemple, tu stockes les données de ta requete dans un DataSet.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    DataAdapter.Fill(dataset, "matable");
    Tu fait ensuite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    listbox1.DataSource = dataset.Tables["matable"];
    listbox1.DisplayMember = "nom"
    cela va te lister ds ta liste box les noms des clients.

    Ensuite pour récupérer l'id du sélectionné, puisque c'est dans le même ordre que dans ta table de ton dataset, c'est tres simple !!
    tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    int ID = dataset.Tables["matable"].Rows[listbox1.selectedIndex]["Identifiant"]
    Bon bien sur, peux y avoir des erreurs, puisque je fais ca a main levée ^^
    mais tu devrait t'y retrouver avec la completion de code.

    Elle est pas belle la vie en dotNET ??
    "Seules deux choses sont infinies : l'univers et la bétise humaine... Quoique je ne suis pas tout à fait sûr pour l'univers..."
    -Albert Einstein-
    Pensez au tag RESOLU !!!

  4. #4
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2003
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juillet 2003
    Messages : 197
    Points : 115
    Points
    115
    Par défaut
    Merci de ta réponse je testerais ca lundi ... pfiou enfin week end.

    mais en fait si je veux pouvoir stocker l'identifiant et le nom dans ma listbox c'est pour pouvoir mettre le dataset a nothing une fois utilisé je sais pas si ca allege vraiment la memoire mais bon j'avais pris parti de le faire.

    du coup je vais attendre lundi pour voir les réactions a ce nouveau post ou au tient et traiter le probleme en consequence.

    j'en profite aussi (dans le cas ou des kadors de VS.NET passe par la ) le dataset peut normalement updater ma table en auto.

    mais comment faire car dans ce cas je pourrais essayer de lier le dataset au listbox puis lors d'une mis a jour de la table le faire dans le dataset quio lui meme repercuterai dans la base.

    (attention ma derniere phrase est a prendre au conditionnel je ne suis pas sur de ce que j'avance)

    @+

    Hirochirak
    -- Se lance dans l'asp.net 2.0 --

    Made In Taïwan

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 52
    Points : 48
    Points
    48
    Par défaut
    Ce que tu avances est tout a fait juste.

    Il faut créer un DataAdapter qui va se charger de remplir un DataSet en mémoire. tu peux le modifier a loisir, et utiliser une méthode Update() pour mettre a jour ta base ed données !

    Il y a un tutoriel bien foutu sur developpez.com pour les dataadapter, je t'invite a y jeter un coup d'oeil.
    Le mode déconnecté est, je pense, le plus performant et le plus sur.

    Bon Week-End et @ Lundi.
    De bonne heure et de bonne humeur
    C'est la devise de mon patron looOOool
    "Seules deux choses sont infinies : l'univers et la bétise humaine... Quoique je ne suis pas tout à fait sûr pour l'univers..."
    -Albert Einstein-
    Pensez au tag RESOLU !!!

  6. #6
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Septembre 2003
    Messages
    399
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Septembre 2003
    Messages : 399
    Points : 259
    Points
    259
    Par défaut List et autre
    Tu n'as cas gérer tes clients avec une une classe client et tu créer une occurence pour chaque client
    Quand tu récupères tes infos de tes clients tu crée un nouveau client
    exemple

    Dans ta boucle tu fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
      dim Cli as new client(Tes infos client que tu passes à ton constructeur)
      taliste.add(Cli)
      cli = nothing
    n'oubli pas dans ta classe client de faire une fonction comme celle là

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Public Overrides Function ToString() As String
          'retourne le nom de ton client
           Return (nom)
    End Function
    Cette fonction réécrit la fonction Tostring
    C'est celle là qui sera appeller par ta liste pour afficher les infos

    ensuite pour récupéré ton client quand depuis ta liste tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
      dim cli as client
      cli =  taliste.SelectedItem
    Et oui car maintenant chaque item un objet de type client

    maitenant avec l'objet cli tu appeler n'importe quel fonction de ta classe client.
    donc tu n'as cas faire une fonction qui te renvoie ton numéro que tu souhaite récupéré et l'appeller et le tour est joué.

  7. #7
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2003
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juillet 2003
    Messages : 197
    Points : 115
    Points
    115
    Par défaut
    la solution de ricil78 me plait bien ...

    avant de pouvoir la tester je dois faire quelques tests sur mon appli.

    En attendant j'aimerais que vous me disiez si ma déclaration de classe correpond a ce dont parle ricil78

    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
    Public Class class_client
        Dim _id As Integer
        Dim _nom As String
        Public Property id() As Integer
            Get
                Return _id
            End Get
            Set(ByVal Value As Integer)
                _id = Value
            End Set
        End Property
        Public Property nom() As String
            Get
                Return _nom
            End Get
            Set(ByVal Value As String)
                _nom = Value
            End Set
        End Property
    end class
    voici la déclaration de la classe, je vous passe les fonctions de la classe qui ne sont pas que pour lister, ajouter, modifier, supprimer un client.

    merci de votre participation

    @+

    Hirochirak
    -- Se lance dans l'asp.net 2.0 --

    Made In Taïwan

  8. #8
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Septembre 2003
    Messages
    399
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Septembre 2003
    Messages : 399
    Points : 259
    Points
    259
    Par défaut j'ai un peu corrigé ta classe.
    Salut

    j'ai un peu corrigé ta classe.
    Il te manque juste la fonction ToString()
    J'ai mis en privé tes propriétés _id et _nom
    Et le constructeur

    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
     
    Public Class class_client 
        Private _id As Integer 
        Private _nom As String 
     
        sub new(byval id as integer, byval Nom as string)
              _id=id
              _nom=nom
        end sub
     
        Public Property id() As Integer 
            Get 
                Return _id 
            End Get 
            Set(ByVal Value As Integer) 
                _id = Value 
            End Set 
        End Property 
        Public Property nom() As String 
            Get 
                Return _nom 
            End Get 
            Set(ByVal Value As String) 
                _nom = Value 
            End Set 
        End Property 
     
       Overrides Function ToString() As String
            Return (_nom)
       End Function
    end class
    exemple utiliser ton constructeur
    dim cli as new class_client( 1978 , Ricil78 )

    Voilà Ta classe qui doit fonctionner. La fonction ToString(), c'est la fonction qui sera appelé par ta défaut par une liste déroulante ou objet du meme style. En gros c'est ta fonction d'affichage. Donc là ici si tu envoies un objet de type class_client dans une liste déroulante tu verra apparaitre les noms de tes clients. l'avantage de cela c'est que tu peu faire du traitement avant l'affichage. Exemple simple renvoyé le nom et le prénom dans ta liste. On peu imaginé ce qu'on veut.

    Rapel:
    pour récupéré l'id du client selectionné tu fait.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
      dim IdClient as integer
      dim cli as class_client 
      cli =  taliste.SelectedItem
      IdClient =cli.id
    Ps : si g bien compris la doc .net fait attention car le type integer n'est pas .net, regarde plutôt du coté int36 , int32 , ect


    @+

  9. #9
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2003
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juillet 2003
    Messages : 197
    Points : 115
    Points
    115
    Par défaut
    merci beaucoup je finis ma phase de test et je verifie tout le code fourni.

    ca a l'avantage de me rappeler des souvenirs (constructeur ...)

    ca marche du tonnerre, j'ai du readapter un peu mon code mais c'est vraiment parfait a utiliser


    @+

    Hirochirak
    -- Se lance dans l'asp.net 2.0 --

    Made In Taïwan

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

Discussions similaires

  1. [WPF][ListBox]Type d'elements d'une ListBox est une form?
    Par bakonu dans le forum Windows Presentation Foundation
    Réponses: 10
    Dernier message: 18/02/2008, 10h00
  2. Réponses: 4
    Dernier message: 24/05/2006, 16h05
  3. Réponses: 2
    Dernier message: 22/05/2006, 16h36
  4. [vb.net][String] retrouver des elements d'une chaine
    Par arnolem dans le forum Windows Forms
    Réponses: 3
    Dernier message: 10/01/2006, 11h31
  5. [debutant] supprimer elements dans une listbox
    Par F.F. dans le forum C++Builder
    Réponses: 8
    Dernier message: 02/07/2004, 11h38

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