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 :

Récupération d'index d'un combobox


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite Avatar de yonpo
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2010
    Messages
    617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2010
    Messages : 617
    Par défaut Récupération d'index d'un combobox
    Salut à tous,

    Je relie un champ d'une table d'un dataset à un combobox avec la propriété datasource.

    Lorsque je saisie du texte dans le combobox, il me filtre le contenu en fonction de ce que je tape et je sélectionne un élément dans la liste déroulante.
    Ensuite, si je veux récupérer l'index, j'utilise la propriété SelectedIndex.
    Bon, ok et alors?

    Maintenant, si je saisie et que je ne sélectionne pas un élément dans la liste et que je récupère l'index, j'obtiens -1. Ok, normal.

    J'en arrive à ma question: Comment connaitre l'index de l'élément tapé (et non sélectionné) si et seulement si ce dernier est dans la liste?

    Merci d'avance pour vos lumières...

  2. #2
    Membre Expert Avatar de mactwist69
    Homme Profil pro
    Développement VB.NET
    Inscrit en
    Janvier 2007
    Messages
    1 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement VB.NET
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Par défaut
    Si l'élément est affiché alors tu pourrais surement faire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    If MonCB.Items.Contains(MonCB.Text) Then
     
        return  MonCB.Items.IndexOf(MonCB.Text)
     
    End If

  3. #3
    Membre émérite Avatar de yonpo
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2010
    Messages
    617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2010
    Messages : 617
    Par défaut
    Le test suivant à pour résultat "faux". Pourtant l'élément tapé est bien dans la liste.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    If MonCB.Items.Contains(MonCB.Text) Then
     
     
    End If

  4. #4
    Membre émérite Avatar de ctxnop
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Morbihan (Bretagne)

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 858
    Par défaut
    Citation Envoyé par yonpo Voir le message
    Le test suivant à pour résultat "faux". Pourtant l'élément tapé est bien dans la liste.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    If MonCB.Items.Contains(MonCB.Text) Then
     
    End If
    En fait l'idée est bonne mais tu l'a copiée sans réfléchir.
    Tu as dis que ton combobox est bindé à une DataTable, en conséquence les éléments contenus dans MonCB.Items ne sont pas de simple strings, ce sont des DataRow ou DataRowView.
    La comparaison est donc un peu plus complexe que cela.

  5. #5
    Membre émérite Avatar de yonpo
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2010
    Messages
    617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2010
    Messages : 617
    Par défaut
    Citation Envoyé par ctxnop Voir le message
    La comparaison est donc un peu plus complexe que cela.
    Ok merci.
    Mais comment je pourrais procéder? En travaillant sur la table?

  6. #6
    Membre émérite Avatar de yonpo
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2010
    Messages
    617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2010
    Messages : 617
    Par défaut
    Bon j'ai finalement trouvé avec la piste des DataRow que tu m'as donnée ctxnop.

    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
     
    'Vérifie si le titre saisi est dans la table Livres
                Dim strTitreExiste As String = "Titre='" & cbxTitre.Text.Replace("'", "''") & "'"
                Dim objDtrResult() As DataRow
     
                objDtrResult = objDts.Tables("Livres").Select(strTitreExiste)
     
                Dim objDttResult As New DataTable
                objDttResult.Columns.Add("Titre")
     
                Dim intTitre As Integer
                For Each r As DataRow In objDtrResult
     
                    objDttResult.ImportRow(r) 'sert pour plus tard...
                    intTitre = objDts.Tables("Livres").Rows.IndexOf(r)
     
                Next
    Je fais une recherche du titre dans la table et je récupère l'index de l'élément tapé dans le combobox.
    Merci encore pour votre aide.

  7. #7
    Membre Expert
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    700
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 700
    Par défaut
    bonsoir,
    si la liste du combo est chargée au préalable,
    ce code donne l'index cherché :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
        Private Sub ComboBox1_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ComboBox1.TextChanged
            Dim resultIndex As Integer = -1
     
            ' Call the FindStringExact method to find the first 
            ' occurrence in the list.
     
            resultIndex = ComboBox1.FindStringExact(ComboBox1.Text)
            If resultIndex <> -1 Then
                MessageBox.Show(CStr(resultIndex))
            End If
     
     
        End Sub
    mais ça me semble trop simple.

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

Discussions similaires

  1. [JComboBox] récupération d'index
    Par Jean-Claude Dusse dans le forum Composants
    Réponses: 9
    Dernier message: 19/05/2008, 09h34
  2. Récupération N° index
    Par telma95 dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 08/07/2007, 22h14
  3. Connaitre l' Index d'une combobox
    Par auver dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 28/06/2006, 12h14
  4. 'Index' d'un ComboBox.AddItem : Valeurs désordonnées.
    Par __fabrice dans le forum VB 6 et antérieur
    Réponses: 13
    Dernier message: 26/10/2005, 16h41
  5. Récupération d'index dans DBLookupControl ?
    Par Michel D. dans le forum Bases de données
    Réponses: 4
    Dernier message: 02/06/2004, 15h01

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