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:
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:
Citation:
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.