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 listbox avec plusieurs colonnes


Sujet :

VB.NET

  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2008
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 52
    Points : 17
    Points
    17
    Par défaut problème listbox avec plusieurs colonnes
    bonjour,
    mon probleme est simple a comprendre mais je n'arrive pas à le resoudre.
    je souhaite remplir une listbox avec les données d'une table de ma base, et je voudrais lorsque je clique sur une ligne de ma listbox, remplir une textbox avec des données de cette meme table,
    jusqu'a pas de soucis 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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
     
    Private Sub Form_S5_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
     
            'Initialisation de la chaîne contenant l'instruction SQL
     
            strSql = "SELECT * FROM Structure_Predefined"
     
            'Ouvrir la connexion
     
            ObjetConnection.Open()
     
            'Instancier un objet Commande
     
            ObjetCommand = New OleDbCommand(strSql, Form1.myConnexion)
     
            'Instancier un objet Adapter
     
            ObjetDataAdapter = New OleDbDataAdapter(ObjetCommand)
     
            'initialiser l'objet Command
     
            ObjetCommand.Connection() = ObjetConnection
     
            'Avec l'aide de la propriété Fill du DataAdapter charger le DataSet
     
            ObjetDataAdapter.Fill(ObjetDataSet, "Structure_Predefined")
     
            'Mettre dans un Objet DataTable une table du DataSet
     
            ObjetDataTable = ObjetDataSet.Tables("Structure_Predefined")
     
            'Indiquer quelle colonne afficher
            Lstbox_Structure.MultiColumn = True
     
            Lstbox_Structure.DisplayMember = ("Structure_name")
     
            Lstbox_Structure.ValueMember = "Structure_id"
     
            'Indiquer au ListBox d'afficher la table "Structure_Predefined" (indiquer la source)
     
            Lstbox_Structure.DataSource = ObjetDataSet.Tables("Structure_Predefined")
     
            ObjetConnection.Close()
     
     
    Private Sub Lstbox_Structure_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles Lstbox_Structure.SelectedIndexChanged
            'Dans ce cas ListBox1.SelectedValue contient bien un Int32 correspondant au 'NutInt' selectionné.
            'Ensuite on peut récupérer sans problème NumInt (et l'afficher par exemple dans une TextBox)
     
            If Lstbox_Structure.SelectedIndex <> -1 Then
                txt_scenario.Text = CStr(Lstbox_Structure.SelectedValue)
            End If
        End Sub
    Donc la j'affiche dans la listbox Lstbox_Structure.DisplayMember = ("Structure_name")
    et la valeur de cette donnée est :Lstbox_Structure.ValueMember = "Structure_id"

    moi se que je veux, c'est dans ma textbox non pas afficher :
    txt_scenario.Text = CStr(Lstbox_Structure.SelectedValue)
    mais une troisieme colonne de cette table.
    je ne sais pas comment recuperer la colonne desiré, pourtant dans le datasource j'ai bien toute ma table.


    alors mon probleme ai comment afficher une colonne de lier a la listbox ?
    je bloque vraiment.
    merci a vous

  2. #2
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 442
    Points
    4 442
    Par défaut Lstbox.SelectedValue <=>correspond Lstbox_Structure.ValueMember
    bonjour djams9
    tu mets dans Lstbox_Structure.ValueMember la colonne souhaite pas necessairement "Structure_id" et il te renverra la valeur dans Lstbox_Structure.SelectedValue.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
            Lstbox_Structure.DisplayMember = ("Structure_name")
     
            Lstbox_Structure.ValueMember = "Structure_MaColonne"
     
     
          'ce code toujours valable sans modif
          Private Sub Lstbox_Structure_SelectedIndexChanged(ByVal sender As  Object, ByVal e As System.EventArgs) Handles Lstbox_Structure.SelectedIndexChanged
           'Dans ce cas ListBox1.SelectedValue contiendra la colonne mentionne dans ValueMember.
           'Ensuite on peut récupérer sans problème la valeur de ValueMember 
           If Lstbox_Structure.SelectedIndex <> -1 Then
                txt_scenario.Text = CStr(Lstbox_Structure.SelectedValue)
           End If
          End Sub
    bon code...........

  3. #3
    Membre à l'essai
    Inscrit en
    Mai 2008
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 52
    Points : 17
    Points
    17
    Par défaut
    Bonjour,

    Oui Mabrouki je sais qu'en metant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Lstbox_Structure.ValueMember = "Structure_MaColonne"
    je peut la recuperer ensuite grace au SelectValue, mais sa ne change rien au probléme pcq la valeur actuel dans ce SelectValue c'est "Strucure_id", et j'en ai besoin pour les requetes qui suivent dans le programme,

    Alors comment travailler dans une listbox avec 3 champs?
    1 dans ValueMember, 1 dans DispayMember, mais la 3éme..............

  4. #4
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2011
    Messages
    453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 453
    Points : 478
    Points
    478
    Par défaut
    Sur le .Tag de ta ListBox tu peux ajouter une 3ème valeur

  5. #5
    Membre à l'essai
    Inscrit en
    Mai 2008
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 52
    Points : 17
    Points
    17
    Par défaut
    ah sa c'est une reponse qui me plait, j'essaye de suite et je reviens vous informez,
    j'espere que sa va marcher

    Merci Shadam

  6. #6
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2011
    Messages
    453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 453
    Points : 478
    Points
    478
    Par défaut
    Oups je viens de relire ATTENTIVEMENT tes posts et le souci c'est que sur le tag tu ne peux mettre qu'une valeur et pas une par enregistrement...
    par contre tu peux te débrouiller pour lui attribuer la valeur qui t'intéresse en fonction du selected value (en stockant les valeurs dans une liste ou quelque chose dans le genre)

  7. #7
    Membre à l'essai
    Inscrit en
    Mai 2008
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 52
    Points : 17
    Points
    17
    Par défaut
    reee

    Je viens d'essayer avec le .Tag, mais sa ne marche pas,
    voici se que j'ai fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    ObjetDataTable = ObjetDataSet.Tables("Structure_Predefined")
     
            'Indiquer quelle colonne afficher
            Lstbox_Structure.MultiColumn = True
            Lstbox_Structure.Tag = "Structure_id"
            Lstbox_Structure.DisplayMember = "Structure_name"
            Lstbox_Structure.ValueMember = "Structure"
     
            'Indiquer au ListBox d'afficher la table "Structure_Predefined" (indiquer la source)
     
            Lstbox_Structure.DataSource = ObjetDataSet.Tables("Structure_Predefined")
    parce que ensuite j'utilise ces données pour une requete insert que voici :
    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
     Dim myCommand As OleDbCommand = New System.Data.OleDb.OleDbCommand()
       'Requete mise a jour de la table Scenarios
       Dim myRequette As String = "INSERT INTO [Scenarios] ( [Sc_name], Sc_conceptualised, Structure_id) VALUES (@Sc_name,@Sc_conceptualised,@Structure_id)"
     
           'Création de la commande SQL
          myCommand = New OleDbCommand(myRequette, Form1.myConnexion)
     
         'Création et décalartion des paramètres
          With myCommand.Parameters
            .Add(New OleDbParameter("@Sc_name", OleDbType.VarChar, 255))
            .Add(New OleDbParameter("@Sc_conceptualised", OleDbType.VarChar, 255))
            .Add(New OleDbParameter("@Structure_id", OleDbType.Integer))
          End With
     
                    'Attribution des valeurs aux paramètres
     With myCommand
            .Parameters("@Sc_name").Value = CStr(Lstbox_Structure.Text)
            .Parameters("@Sc_conceptualised").Value = CStr(txt_scenario.Text)
            .Parameters("@Structure_id").Value = CInt(Lstbox_Structure.Tag)     End With
     
     
                    'Execution de la requête
                    myCommand.Connection.Open()
                    myCommand.ExecuteNonQuery()
                    myCommand.Connection.Close()
    donc dans @Structure_id je veux recuperer le Structure_Id correspondant a l'objet cliquer dans la listbox

  8. #8
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2011
    Messages
    453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 453
    Points : 478
    Points
    478
    Par défaut
    Je te le redis parce qu'apparemment tu n'as pas vu que j'avais répondu entre temps

    Citation Envoyé par Shadam Voir le message
    Oups je viens de relire ATTENTIVEMENT tes posts et le souci c'est que sur le tag tu ne peux mettre qu'une valeur et pas une par enregistrement...
    par contre tu peux te débrouiller pour lui attribuer la valeur qui t'intéresse en fonction du selected value (en stockant les valeurs dans une liste ou quelque chose dans le genre)

  9. #9
    Membre à l'essai
    Inscrit en
    Mai 2008
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 52
    Points : 17
    Points
    17
    Par défaut
    Shadam,
    Comment je dois faire pour stocker mes valeurs dans une liste si je peux travailler qu'avec 2 colonnes de ma tables. je dois mettre le tout dans une ArrayList, et ensuite ma listbox?

    Je trouve vraiment nul qu'on ne puisse pas afficher plusieur colonne dans une listbox,
    Peu t'etre il existe un autre controle que le listbox ou je pourrais afficher 2 colonne plus une 3eme qui serait l'ID,????

  10. #10
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2011
    Messages
    453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 453
    Points : 478
    Points
    478
    Par défaut
    Il suffit que tu déclare une List(Of Integer) Puis tu fais un "For Each" ou tu mets tout les "Structure_id" dedans et ensuite tu implémentes l'évènement "SelectedValueChanged" sur ton ListBox où tu parcours ton List(Of ) pour récupérer ton Id qui va bien avec la sélection et que tu mets sur le .Tag de la ListBox

    Après je ne suis pas un spécialiste de la ListBox vu que je ne m'en sers jamais, elle fourni peut être des propriétes qui te permettent de faire ce genre de chose...

  11. #11
    Membre à l'essai
    Inscrit en
    Mai 2008
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 52
    Points : 17
    Points
    17
    Par défaut
    ok merci,
    je vais essayer et je vous tiens au courant,
    merci pour ton aide en tout cas

  12. #12
    Membre à l'essai
    Inscrit en
    Mai 2008
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 52
    Points : 17
    Points
    17
    Par défaut
    alors j'ai essayer de recuperer ma colonne en faisant une 2eme listbox
    voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     Lstbox_Structure.DisplayMember = ("Structure_name")
     Lstbox_Structure.ValueMember = "Structure_id"
     Lstbox_Structure.DataSource = ObjetDataSet.Tables("Structure_Predefined")
     
     
            lstboxtest.DisplayMember = ("Structure")
            lstboxtest.ValueMember = "Structure_id"
            lstboxtest.DataSource = ObjetDataSet.Tables("Structure_Predefined")
    et j'ai essaye de me placer sur l'index de ma 2nd listbox correspondant a l'index de la 1er; voici le 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
     
    Private Sub Lstbox_Structure_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles Lstbox_Structure.SelectedIndexChanged
     
            lstboxtest.SetSelected(CInt(Me.Lstbox_Structure.SelectedValue), True)
    'j'ai essayé egalement cela mais sans succes :
           ' lstboxtest.SetSelected(Lstbox_Structure.SelectedIndex, True)
     
            If Lstbox_Structure.SelectedIndex <> -1 Then
                int_structure_id = CInt(Lstbox_Structure.SelectedValue)
     
                'Lstbox_Structure.ValueMember = "Structure"
                txt_scenario.Text = CStr(lstboxtest.DisplayMember)
            End If
        End Sub
    qqun pourrait m'aider svp

  13. #13
    Membre à l'essai
    Inscrit en
    Mai 2008
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 52
    Points : 17
    Points
    17
    Par défaut
    Sa yé j'ai résolu mon problème,
    bon j'ai triché un peu mais sa marche

    en fait n'ayant toujours pas trouvé comment travailler avec 3 colonnes sur une Listbox, j'ai fait une 2eme listbox, ou je met la 3eme Colonne voulu dans DisplayMember, et toujours l'id dans SelectedValue,

    J'ai mis cette ListBox.Visible=False,
    J'avais déjà essayé cela dans la precedante discussion mais je cherchais à lier les index des 2 listbox, sans succés,
    La pour que sa marche j'ai rien fait, lol, VB.net m'a lier automatiquement les 2 listBox, ce qui fait que quand je clique sur l'une, l'autre change aussi,

    Voila, voila

    voici le code quand meme pour ceux qui en aurait besoin, et merci a toi Shadam pour ton aide.
    bye bye

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     'Indiquer quelle colonne afficher
     Lstbox_Structure.DisplayMember = ("Structure_name")
     Lstbox_Structure.ValueMember = "Structure_id"
     Lstbox_Structure.DataSource = ObjetDataSet.Tables("Structure_Predefined")
     
            ListBox2.DisplayMember = ("Structure_id")
            ListBox2.ValueMember = "Structure"
            ListBox2.DataSource = ObjetDataSet.Tables("Structure_Predefined")
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     Private Sub Lstbox_Structure_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles Lstbox_Structure.SelectedIndexChanged
     
            If Lstbox_Structure.SelectedIndex <> -1 Then
                int_structure_id = CInt(Lstbox_Structure.SelectedValue)
                txt_scenario.Text = CStr(ListBox2.SelectedValue)
            End If
        End Sub

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

Discussions similaires

  1. comment avoir Listbox avec plusieurs colonnes
    Par pseudo88 dans le forum ASP.NET
    Réponses: 1
    Dernier message: 20/05/2010, 10h45
  2. Comment créer une listBox avec plusieurs colonnes ?
    Par volcom_2222 dans le forum VB.NET
    Réponses: 6
    Dernier message: 27/02/2010, 11h44
  3. [ComboBox] Combobox avec plusieurs colonnes
    Par madica dans le forum Windows Forms
    Réponses: 6
    Dernier message: 15/01/2007, 11h25
  4. vba, listbox avec plusieur colonne
    Par morgan47 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 20/06/2006, 18h35
  5. Réponses: 1
    Dernier message: 04/05/2005, 11h43

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