Filtrer un combobox liées à un dataset

Résolu
Ludiv60 Messages postés 20 Date d'inscription lundi 25 août 2008 Statut Membre Dernière intervention 24 novembre 2008 - 25 août 2008 à 16:06
youpiyoyo Messages postés 539 Date d'inscription vendredi 6 juin 2003 Statut Membre Dernière intervention 14 juillet 2010 - 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.

10 réponses

LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
25 août 2008 à 18:20
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.
0
Ludiv60 Messages postés 20 Date d'inscription lundi 25 août 2008 Statut Membre Dernière intervention 24 novembre 2008 1
26 août 2008 à 08:59
Merci, je vais essayer ça.


 
0
youpiyoyo Messages postés 539 Date d'inscription vendredi 6 juin 2003 Statut Membre Dernière intervention 14 juillet 2010
26 août 2008 à 11:32
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 :)
0
Ludiv60 Messages postés 20 Date d'inscription lundi 25 août 2008 Statut Membre Dernière intervention 24 novembre 2008 1
23 sept. 2008 à 11:20
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
youpiyoyo Messages postés 539 Date d'inscription vendredi 6 juin 2003 Statut Membre Dernière intervention 14 juillet 2010
23 sept. 2008 à 11:35
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 :)
0
Ludiv60 Messages postés 20 Date d'inscription lundi 25 août 2008 Statut Membre Dernière intervention 24 novembre 2008 1
23 sept. 2008 à 13:05
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
0
Ludiv60 Messages postés 20 Date d'inscription lundi 25 août 2008 Statut Membre Dernière intervention 24 novembre 2008 1
23 sept. 2008 à 13:37
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
0
youpiyoyo Messages postés 539 Date d'inscription vendredi 6 juin 2003 Statut Membre Dernière intervention 14 juillet 2010
29 sept. 2008 à 14:48
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 :)
0
Ludiv60 Messages postés 20 Date d'inscription lundi 25 août 2008 Statut Membre Dernière intervention 24 novembre 2008 1
29 sept. 2008 à 15:01
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.
0
youpiyoyo Messages postés 539 Date d'inscription vendredi 6 juin 2003 Statut Membre Dernière intervention 14 juillet 2010
29 sept. 2008 à 16:07
si cela marche... tant mieux
@+
youpi :)
-2
Rejoignez-nous