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 :

ComboBox DataSource.Find Problème


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 048
    Par défaut ComboBox DataSource.Find Problème
    Bonjour à tous

    Dans un formulaire il se trouve 2 combobox listant des catégories et des sous catégories (par datasource). Ces deux informations sont bien entendu lié (catégorie = table mère, sous catégories = table fille).

    La valeur des combobox doit obligatoirement se trouver dans le datasource.

    Au début j'ai utilisé le DropDownStyle = DropDownList qui remplit effectivement très bien ce rôle.

    Néanmoins il y a une chose qui me déplait, plutôt à mes futurs utilisateur en fait, c'est que la recherche dans la ComboBox ne se fait que sur la première lettre, contrairement à la DataGridviewComboBoxCollum.

    Si on tappe A puis L, au lieu d'arriver au valeur AL, on arrive à L

    Bon pas grave, je décide de remettre le DropDownStyle à DropDown (La liste se position correctement en fonction de ce que tappe l'utilisateur) et décide de balancer un test dans l'évenement validating du comboBox pour vérifier que le texte se trouve bien dans le datasource du Combo.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
        Private Sub ComboBox1_Validating(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles ComboBox1.Validating
            Try
                If Not sender.DataSource.Find("Nom", sender.text.Replace("'", "''")) > -1 Then
                    MsgBox("La valeur sélectionné n'est pas correct." & vbNewLine & "Sélectionnez une valeur de la liste.", MsgBoxStyle.Exclamation, "Erreur Saisie")
                    e.Cancel = True
                End If
            Catch ex As Exception
                MsgBox(ex.Message, MsgBoxStyle.Critical, "Erreur")
                sender.Text = Nothing
                e.Cancel = True
            End Try
        End Sub
    Ca fonctionne nickel pour le comboBox mère (les catégories), mais pour le comboBox fille (sous catégories), j'ai le droit à la belle erreur suivante:
    La propriété DataMember 'Nom' est introuvable dans le DataSource..
    En ajoute un .datasource (le datasource du datasource) le find fonctionne mais sur le binding source mère (dans la liste des catégories en fait).

    Avez vous une idée sur ce qui cloche?

    P.S. Je suis ouvert à d'autre piste permettant de résoudre le problème initial bien entendu.

  2. #2
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 048
    Par défaut
    Bon j'ai trouvé la solution

    Dans le cas de binding relationnel il faut passer par un PropertyDescriptor Collection.

    Donc

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Not sender.DataSource.Find("Nom", sender.text) > -1 Then
    Devient

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
                Dim pdc As System.ComponentModel.PropertyDescriptorCollection = sender.DataSource.CurrencyManager.GetItemProperties()
     
                If Not sender.DataSource.Find(pdc("Nom"), sender.text) > -1 Then
    Source:

    http://www.bokebb.com/dev/english/19...99497973.shtml

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

Discussions similaires

  1. [find] Problème avec -exec
    Par kromartien dans le forum Shell et commandes GNU
    Réponses: 9
    Dernier message: 06/11/2007, 17h09
  2. [Datasource] [JNDI] Problème de nommage
    Par legzo dans le forum Wildfly/JBoss
    Réponses: 5
    Dernier message: 29/01/2007, 15h37
  3. Réponses: 6
    Dernier message: 13/10/2006, 15h56
  4. [VB.net 2005]ComboBox.DataSource ignore l'ArrayList source
    Par Macintoc dans le forum Windows Forms
    Réponses: 1
    Dernier message: 22/08/2006, 19h31
  5. [VB.NET] Combobox, Datasource et durée d'execution
    Par lacsap49 dans le forum Windows Forms
    Réponses: 1
    Dernier message: 19/05/2006, 16h06

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