Binding entre 2 ComboBox

Résolu
cs_bellak Messages postés 136 Date d'inscription jeudi 27 décembre 2007 Statut Membre Dernière intervention 5 mai 2011 - 4 août 2009 à 16:38
yayasam Messages postés 33 Date d'inscription vendredi 26 mars 2010 Statut Membre Dernière intervention 26 juillet 2010 - 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
A voir également:

5 réponses

Kikuts Messages postés 159 Date d'inscription jeudi 11 janvier 2007 Statut Membre Dernière intervention 5 novembre 2010
7 août 2009 à 10:15
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
3
cs_bellak Messages postés 136 Date d'inscription jeudi 27 décembre 2007 Statut Membre Dernière intervention 5 mai 2011
5 août 2009 à 14:36
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
0
Kikuts Messages postés 159 Date d'inscription jeudi 11 janvier 2007 Statut Membre Dernière intervention 5 novembre 2010
6 août 2009 à 16:04
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.
++
0
cs_bellak Messages postés 136 Date d'inscription jeudi 27 décembre 2007 Statut Membre Dernière intervention 5 mai 2011
7 août 2009 à 00:23
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
0

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

Posez votre question
yayasam Messages postés 33 Date d'inscription vendredi 26 mars 2010 Statut Membre Dernière intervention 26 juillet 2010
9 avril 2010 à 10:54
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!
0
Rejoignez-nous