Filtrer un combobox liées à un dataset [Résolu]

Ludiv60 20 Messages postés lundi 25 août 2008Date d'inscription 24 novembre 2008 Dernière intervention - 25 août 2008 à 16:06 - Dernière réponse : youpiyoyo 539 Messages postés vendredi 6 juin 2003Date d'inscription 14 juillet 2010 Dernière intervention
- 29 sept. 2008 à 16:07
Bonjour

J'ai créée une appli mais je bute sur un pb de combo depuis un moment maintenant, si quelqu'un peut m'aider. Ca serais trop sympa.
J'ai une table disons table_source qui contient deux champs code et code2, code a une relation avec table2 et code1 avec table3, j'affiche des combox avec les libellés, ca pas de souci
Combo1
me.combobox1.selectedvalue= me.table_source.code
me.combobox1.datasource=me.table2
me.combobox1.displaymember=libellé
me.combobox1.valuemember=code
Combo2
me.combobox2.selectedvalue= me.table_source.code2
me.combobox2.datasource =me.table3
me.combobox2.displaymember=libellé
me.combobox2.valuemember=code

le souci c'est que je veux pouvoir filtrer le deuxième combo en fonction de la valeur du premier combo et là, je bute
J'ai bien essayé de mettre dans la proc selectedvaluechange du premier combo un filtre sur table3 mais ensuite je perd ma liaisons avec mes données de ma table, il filtre bien les données mais il m'affiche le premier éléments de la table3 au lieu de m'afficher l'éléments de ma table_source. C'est comme ci le selectedvalue avait changé alors que ce n'est pas le cas.

avis au bonne idée, je suis preneuse.
Afficher la suite 

10 réponses

Répondre au sujet
LIBRE_MAX 1403 Messages postés mardi 1 mai 2007Date d'inscription 7 octobre 2012 Dernière intervention - 25 août 2008 à 18:20
0
Utile
Salut,
datasource de combobox2 devra être une requete selection avec clause where code = item sélectionné dans combo1.

<hr />

[*] Ce qui va sans dire. va mieux en le disant.
Commenter la réponse de LIBRE_MAX
Ludiv60 20 Messages postés lundi 25 août 2008Date d'inscription 24 novembre 2008 Dernière intervention - 26 août 2008 à 08:59
0
Utile
Merci, je vais essayer ça.


 
Commenter la réponse de Ludiv60
youpiyoyo 539 Messages postés vendredi 6 juin 2003Date d'inscription 14 juillet 2010 Dernière intervention - 26 août 2008 à 11:32
0
Utile
Salut,
Sinon utilise deux binding source et utilise la fonction filter...
tu peux également faire un .select sur ta datatable... (ex: dim dtrow as datarow()=datatable.select("Fields='condition'")
@+
youpi :)
Commenter la réponse de youpiyoyo
Ludiv60 20 Messages postés lundi 25 août 2008Date d'inscription 24 novembre 2008 Dernière intervention - 23 sept. 2008 à 11:20
0
Utile
Bonjour à toutes et à tous,

Je relance ce sujet parce que je suis toujours coincé.
En fait dès que je filtre mon deuxième combo par rapport à la valeur du premier, il m'affiche l'élément 1 de la liste au lieu de m'affiche mon selectedvalue.

Comment faire????
Help me!!!

Merci
Commenter la réponse de Ludiv60
youpiyoyo 539 Messages postés vendredi 6 juin 2003Date d'inscription 14 juillet 2010 Dernière intervention - 23 sept. 2008 à 11:35
0
Utile
a mon avis tu t'y prend mal.
Je m'exprime: tu peux filtrer sur un bindingsource ce n'est pas le probleme, mais cela dépend du nombre d'enregistrement que tu as. bon on parle de combobox donc une colonne, c'est vrai. Le mieux c'est de jouer sur les bindingsource.

Exemple simple entre deux datagridview, 1 master -> 1 child. quand tu choisis un enregistrement master, il bind automatiquement le child par le binding du lien entre les tables (si tu as pas de lien parent <-> fille (lien d'integrité) ceci ne sert a rien, et fait le par filter)
Résumé simple (il y a pas tout dedans juste le principe)
        '
        'MasterBindingSource
        '
        Me.MasterBindingSource.DataMember = "Master"
        Me.MasterBindingSource.DataSource = Me.SampleDataSet
        '
        'ChildBindingSource
        '
        Me.ChildBindingSource.DataMember = "child"
        Me.ChildBindingSource.DataSource = Me.SampleDataSet

        Me.MasterDataGridView.DataSource = Me.MasterBindingSource

        Me.ChildDataGridView.DataSource = Me.MasterchildBindingSource

        '
        'MasterchildBindingSource
        '
        Me.MasterchildBindingSource.DataMember = "Masterchild"             'MasterChild est le nom du lien, vers quoi la datagridview fille pointe....
        Me.MasterchildBindingSource.DataSource = Me.MasterBindingSource

Voila c'est tiré du designer sachant que tu peux également le faire avec le wizard et design de visual qui génere automatiquement le code, si tu as déjà préconfiguré ton xsd..
@+
youpi :)
Commenter la réponse de youpiyoyo
Ludiv60 20 Messages postés lundi 25 août 2008Date d'inscription 24 novembre 2008 Dernière intervention - 23 sept. 2008 à 13:05
0
Utile
J'ai bien des liens d'intégrité entre mes tables mais mon souci c'est que dans mon combo2 ma table source contient une clé primaire double, je pense que c'est ca qui me pose problème. Pour prendre un exemple concret :
j'ai un client pour lequel je peux avoir plusieurs agence
ce client peut emettre une ou plusieurs réclamations,
lors de la saisie d'un dossier, mon user sélectionne un client, et ensuite, je dois lui afficher la liste des agences dispos.
Pour ca, pas de problème mais quand je consulte les dossiers, au lieu de me mettre l'élément sélectionner par mon user, il m'affiche l'élément 1. Ma liste est bonne mon problème vient de l'affichage du display member.

Je vais essayer ce que tu me dit.
Merci
Commenter la réponse de Ludiv60
Ludiv60 20 Messages postés lundi 25 août 2008Date d'inscription 24 novembre 2008 Dernière intervention - 23 sept. 2008 à 13:37
0
Utile
j'ai beau essayé, ca ne marche pas, je crois que je vais essayer de supprimer les liens entre les tables.
Ca ne me parait pas logique mais bon, ca vas peut être fonctionné.
Si quelqu'un a une idée pour m'éviter de jeter mon ordi par la fenêtre parce que ca fait trois jours que je suis sur ce p..... de pb et ca m'énerve. Je sais que ca doit être un truc tout bête mais là, je coince....

Merci
Commenter la réponse de Ludiv60
youpiyoyo 539 Messages postés vendredi 6 juin 2003Date d'inscription 14 juillet 2010 Dernière intervention - 29 sept. 2008 à 14:48
0
Utile
Envoi moi ta base par mail si c du access... sinon si c'est du SQL serveur donne moi le schema (xsd ou visio comme tu veux)
Si tu veux me donner ta source cela serait po mal non plus cela m'eviterai de trop reconstruire... mais bon...
si t ok demande moi mon mail par message perso...
@+
youpi :)
Commenter la réponse de youpiyoyo
Ludiv60 20 Messages postés lundi 25 août 2008Date d'inscription 24 novembre 2008 Dernière intervention - 29 sept. 2008 à 15:01
0
Utile
J'ai trouvé une solution ce weekend, le seul moyen c'est de remettre à jour les connexions du combo dans le code, exemple :



Me



.AGENCEBindingSource.Filter =

"Code_Client="
&

Me
.cbo_client.SelectedValue 'je filtre mon bindingsource


Me
.cbo_agence.DataBindings.Clear() 'nettoyage complet du combobobox,


Me
.cbo_agence.DataBindings.Add(

New
System.Windows.Forms.Binding(

"Selectedvalue"
,

Me
.RECLAMATIONBindingSource,

"Num_Agence"
,

True
)) 'création de la liaisons


Me
.cbo_agence.DataSource =

Me
.AGENCEBindingSource 'affecte mon bindingsource comme source de données de mon combo


Me
.cbo_agence.DisplayMember =

"Agence" 'affiche le membre "Agence"








Me
.cbo_agence.ValueMember =

"Code_agence" 'affecte le champ codeagence comme value member

Et là, ca marche.
Merci quand même pour ton aide.
Commenter la réponse de Ludiv60
youpiyoyo 539 Messages postés vendredi 6 juin 2003Date d'inscription 14 juillet 2010 Dernière intervention - 29 sept. 2008 à 16:07
-2
Utile
si cela marche... tant mieux
@+
youpi :)
Commenter la réponse de youpiyoyo

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.