none
doulon combobox RRS feed

  • Question

  • Bonjour, je suis confronté à une problème, concernant le remplissage de mes combobox. J'en ai mal au crâne à force d'y reflechir, de faire plusieurs test sans succès.

    j'ai essayé de remplir la combobox avec un datasource, cela fonctionne mais impossible de supprimer les doublons, tirplets, ... dans la combo.

    Je suis passé per le remplissage par datareader, même Pb.Private Sub CboBoxPays_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles CboBoxPays.Click
            'CboBoxPays.Items.Clear()
            Dim req As String = "Select Distinct nom from temployés"
            dataadapter = New OleDbDataAdapter(req, cnx)

            dataadapter.fill(dts, "temployés")

            For i As Integer = 0 To dts.Tables("temployés").Rows.Count - 1

                CboBoxPays.Items.Add(dts.Tables("temployés").Rows(i))
            Next
            CboBoxPays.DataSource = dts.Tables("temployés")

            CboBoxPays.DisplayMember = "Nom" 'ou index de colonne

            'For i As Integer = 0 To dts.Tables("temployés").Rows.Count - 1

            'CboBoxPays.Items.Add(dts.Tables("temployés").Rows(i))
            'Next

        End Sub

    Pouvez-vous m'éclairer. Merci d'avance.

    Cordialement.

     

     

     

    samedi 21 mai 2011 19:55

Réponses

  • Bonjour, et merci de vous attarder sur mon problème.

    La solution que m'a préconisé Mr EhJoe, fonctionne parfaitement, voici le code que j'utilise pour lire le dataset et remplir la combo sans doublon :

    'LE DATAREADER
    'Private dr As OleDbDataReader
    dr = cmd.ExecuteReader()
                While (dr.Read())
                    Combobox.Items.Add(dr.Item(2).ToString())
                End While

                Combobox.Sorted = True
                Dim i As Integer
                For i = Combobox.Items.Count - 1 To 1 Step -1
                    If Combobox.Items(i) = Combobox.Items(i - 1) Then Combobox.Items.RemoveAt(i)
                Next i

     

    J'étais parti sur la solution d'utiliser le résultat de la  requête SQL (Select Distinct nom from temployés) sur la base de données, mais sans résultat.

    Comment utiliser la datasource pour remplir une combobox avec une requête SQL?

    Vous avez éveillé ma curiosité.

    En tous les cas, je vous remercie pour cette solution qui fonctionne.

    Cordialement.

     

     

    .

    • Marqué comme réponse Kensi22 lundi 23 mai 2011 17:28
    lundi 23 mai 2011 17:28

Toutes les réponses

  • Bonjour,

    Je te propose :

    combobox1.sorted = true
    dim i as integer
    for i = combobox1.item.count -1 to 1 step -1
     if combobox1.items(i) = combobox.items(i-1) then comboBox1.Items.RemoveAt(i)
    next i
    
    

    Par contre si tu veux ensuite retrouver l'ancien ordre, il faut leur donner un index aux lignes afin de reclasser selon ce dernier ceux qui restent.

     

    Cordialement.

     



    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire
    dimanche 22 mai 2011 19:43
  • Bonjour,

    si vous cherchez l'origine du problème essayez de passer directement votre requête (Select Distinct nom from temployés) sur la base de donnée. Obtenez vous également des doublons ?

    Par ailleurs actuellement, vous ajoutez de 2 façons différentes des éléments :

    - via une boucle for et CboBoxPays.Items.Add

    - via la DataSource

    Il vous faut choisir l'une ou l'autre des méthodes. Qu'obtenez vous avec uniquement l'utilisation de CboBoxPays.Items.Add ?

    Cordialement

     


    lundi 23 mai 2011 12:33
    Modérateur
  • Bonjour, et merci de vous attarder sur mon problème.

    La solution que m'a préconisé Mr EhJoe, fonctionne parfaitement, voici le code que j'utilise pour lire le dataset et remplir la combo sans doublon :

    'LE DATAREADER
    'Private dr As OleDbDataReader
    dr = cmd.ExecuteReader()
                While (dr.Read())
                    Combobox.Items.Add(dr.Item(2).ToString())
                End While

                Combobox.Sorted = True
                Dim i As Integer
                For i = Combobox.Items.Count - 1 To 1 Step -1
                    If Combobox.Items(i) = Combobox.Items(i - 1) Then Combobox.Items.RemoveAt(i)
                Next i

     

    J'étais parti sur la solution d'utiliser le résultat de la  requête SQL (Select Distinct nom from temployés) sur la base de données, mais sans résultat.

    Comment utiliser la datasource pour remplir une combobox avec une requête SQL?

    Vous avez éveillé ma curiosité.

    En tous les cas, je vous remercie pour cette solution qui fonctionne.

    Cordialement.

     

     

    .

    • Marqué comme réponse Kensi22 lundi 23 mai 2011 17:28
    lundi 23 mai 2011 17:28