2010-06-18 21 views
0

J'ai créé un ensemble de données qui contient 2 tables: Utilisateurs (userID, pseudos, d'autres détails de l'utilisateur) Emails (Id, UserId, USEREMAIL)mise en œuvre de maître-détail avec 2 tables dans un ensemble de données (WPF)

Je peuple l'ensemble de données à l'aide de 2 DataAdapters (un pour chaque table)

J'ai une zone de liste, quelques zones de texte et une grille. Listbox obtient tous les utilisateurs, les quelques zones de texte affiche les détails de l'utilisateur lorsqu'il est sélectionné dans la zone de liste (c'est facile, car ils sont tous deux liés à la même table).

la grille doit afficher les adresses e-mail de l'utilisateur sélectionné.

Comment le faire en utilisant la liaison? est-ce possible ou devrais-je attraper l'événement de changement de sélection et filtrer la grille "manuellement" (actuellement la grille affiche tous les emails dans les tableaux).

Répondre

0

Si vous avez une collection qui contient tous les e-mails, vous pourriez essayer de regarder faire la ItemsSource de votre grille un objet qui implémente l'interface ICollectionView - ce qui vous permet de filtrer, trier et regrouper votre collection ...

Vous pouvez obtenir un objet qui implémente cette interface en appelant

var view = CollectionViewSource.GetDefaultView(myList); 
0

Vous pouvez avoir une propriété appelée SelectedUser et le lier à la SelectedItem ListBox. Dans le setter de la propriété, vous pouvez filtrer la liste d'emails liée à la grille. Mais à long terme, vous pouvez créer des modèles à partir de vos tables en utilisant des outils ORM ou des Linq-to-sql disponibles dans VS qui créeront des modèles et leur relation. Par conséquent, quand vous aurez quelque chose comme ça

Class User 
{ 
    UserId, UserName, List<Email> that user has 
} 

Vous pouvez créer un List<User> et une propriété SelectedUser qui serait lié aux éléments d'interface utilisateur.

La grille serait liée à SelectedUser.Emails Par conséquent, tout est lié et le flux fonctionnera correctement.