Binding entre 2 ComboBox [Résolu]

cs_bellak 136 Messages postés jeudi 27 décembre 2007Date d'inscription 5 mai 2011 Dernière intervention - 4 août 2009 à 16:38 - Dernière réponse : yayasam 33 Messages postés vendredi 26 mars 2010Date d'inscription 26 juillet 2010 Dernière intervention
- 9 avril 2010 à 10:54
Bonjour a tous ,
ça fait peu de temps que j'entame le WPF et j'ai pas bien compris le mécanisme du Binding ,
voila mon probleme si quelqu'un pourrait m'aider : j'ai 2 tables BDD ; CHAP(ID-CHAP,INTITULE...) et SOUSCHAP(ID-SOUSCHAP,ID-CHAP,INTITULE) ; 2 combobox , le 1er ComboBox contient les intitules de la table CHAP , pour le moment tout marche bien , maintenant je veux binder mon 2eme ComboBox suivant l'item sélectionne du 1er Combo que je n'arrive pas a le faire .
j'espère que j'étais un peu clair
merci bien et si quelqu'un peut m'aider par des bons tutos je suis preneur
Afficher la suite 

Votre réponse

5 réponses

Meilleure réponse
Kikuts 162 Messages postés jeudi 11 janvier 2007Date d'inscription 5 novembre 2010 Dernière intervention - 7 août 2009 à 10:15
3
Merci
Oups pardon oui c'est pas tout à fait ça

As tu essayé de mettre (cb1.SelectedItem as CHAP).ID_CHAP dans une variable ? (déjà plus simple pour suivre et vérifier) cette variable contient il Id chap ? Est ce que le cast fonctionne bien ?

Sinon je vois pas trop d'où peut venir le problème parce que ça me semble juste

Dsl de pas pouvoir trop t'aider

Merci Kikuts 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 89 internautes ce mois-ci

Commenter la réponse de Kikuts
cs_bellak 136 Messages postés jeudi 27 décembre 2007Date d'inscription 5 mai 2011 Dernière intervention - 5 août 2009 à 14:36
0
Merci
pour le 1er ComboBox j'ai mis :
using (dbEntities bdd = new dbEntities())
{
 var req = from q in bdd.CHAP
           select q;

cb1.DataContext = req.ToList();
cb1.ItemsSource = req.ToList();
cb1.DisplayMemberPath = "INTITULE";
}

et pour le 2eme :
using (dbMEntities bdd = new dbEntities())
if (cb1.SelectedItem==null )
{
      cb2.ItemsSource = null;
}
else
{
     var req1 = from q in bdd.SOUSCHAP
                where q.CHAP.ID_CHAP   == (cb1.SelectedItem as CHAP).ID_CHAP
                select q;
     cb2.ItemsSource = req1.ToList();
     cb2.DisplayMemberPath = "INTITULE";
}
}

et ça retourne l'erreur suivante au niveau de cb2.ItemsSource :
Impossible de créer une valeur constante de type « METRISS.frmDEVIS ». Seuls les types primitifs (« par exemple Int32, String et Guid ») sont pris en charge dans ce contexte.

re merci d'avance
Commenter la réponse de cs_bellak
Kikuts 162 Messages postés jeudi 11 janvier 2007Date d'inscription 5 novembre 2010 Dernière intervention - 6 août 2009 à 16:04
0
Merci
Alors j'ai jamais fait de WPF, mais j'ai fait un truc semblable en Silverlight il y a même pas 1 mois.

je n'ai pas le code sous la main :'( mais il me semble que tu dois binder le combobox2 au combobox1 grâce sur un attribut. C'est une nouveauté de SL3 donc ça doit exister sur WPF.

Admettons 2 listes déroulante lb1 et lb2
Côté XAML tu as :

<ListBox Name="lb1" />
<ListBox Name="lb2"
ItemsSource="{Binding ElementName=lb1, Path=Items, Mode=OneWay}" />

Et côté codeB tu as ton :

var req = from q in bdd.CHAP select q;

lb1.DataContext = req.ToList();
lb1.ItemsSource = req.ToList();
lb1.DisplayMemberPath = "INTITULE";
}

Tiens moi au jus.
++
Commenter la réponse de Kikuts
cs_bellak 136 Messages postés jeudi 27 décembre 2007Date d'inscription 5 mai 2011 Dernière intervention - 7 août 2009 à 00:23
0
Merci
Salut ,
merci kikuts , ça je le sais , le probleme c'est que les 2 ComboBox ne sont pas de la meme table ; le 1er lié a la 1ere table et le 2eme a la 2eme table , et les 2 tables sont liées avec la foreign key ID-CHAP
re merci
Commenter la réponse de cs_bellak
yayasam 33 Messages postés vendredi 26 mars 2010Date d'inscription 26 juillet 2010 Dernière intervention - 9 avril 2010 à 10:54
0
Merci
Salut à tous;
Je suis entrain de faire mon premier combobox avec les WPF et jai du mal à faire le Binding.
mon but est tous simplement de récupérer une liste des nom et l'afficher dans mon combobox, j'ai limpression que le binding passe c juste ke jarrive pas afficher la liste( le combobox contient autaut de nom ajouté mais au niveau d'affichage c tjrs blanc)
voila mon code
public partial class Window1 : Window
{ ObservableCollection<Login> ItemsTest = new ObservableCollection<Login>();
public List<String> nom { get; set; }
public Login log = new Login();
public Window1()
{
InitializeComponent();
nom = log.listname();
combo.ItemsSource = nom;
combo.DataContext = ItemsTest;
}
}



le code XAML correspondant :
<Window x:Class="testlogin.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
DataContext="{Binding RelativeSource={RelativeSource Self}}"
Title="Connexion" Height="481" Width="635" ResizeMode="NoResize" ShowInTaskbar="False" WindowStartupLocation="CenterScreen">
<Grid>
<ComboBox Height="23" Margin="0,13,46,0" Name="combo" VerticalAlignment="Top" HorizontalAlignment="Right" Width="164"
ItemsSource="{Binding Path = ItemsTest}">

<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding name }" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
</ComboBox>
</Grid>

</Window>

voila la classe qui contient la liste des noms (Name) que je veux afficher:
namespace testlogin
{
public class Login
{
public List<String> list{get;set;}
public Login()
{
this.name = "bbbb";
Title2 = name;
}
public void setname(String name)
{
this.name = name;
}



public String name {get;set;}

public string Title2 { get; set; }
public List<String> listname()
{
list = new List<string>();
for (int i = 0; i < 20; i++)
{
name = "aaaa";
list.Add(name);

}
return list;
}
}


}

comme vous pouvez le constater jai ts déclarer public, en mettant le plus possible des get et set afin que ça soit accessible et je pourrais l'afficher mais sans progrès.
merci pour tte aide.

si on ne fait pas ce qu'on aime, il faut qu'on aime ce qu'on fait!
Commenter la réponse de yayasam

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.