2015-07-29 1 views
1

Dans une grille-je utiliser une liste de liaison pour lier des données:Filtrage d'une liste de liaison, la liaison ne fonctionne pas

childBindingSource.DataSource = 
       db.Child.Local.ToBindingList() 
          .Where(child => selectedrow != null 
              && child.MasterID == selectedrow.ID) 
          .ToList(); 

ou sans filtre:

childBindingSource.DataSource = db.Child.Local.ToBindingList(); 

Si je filtre la liste liaison à l'aide une expression où, enregistrer les données ne fonctionne pas, mais je ne reçois aucune exception.

Des idées?

événement click Row pour obtenir les enregistrements enfants:

private void gridView1_RowClick(object sender, RowClickEventArgs e) 
    { 
     selectedrow = gridView1.GetFocusedRow() as Master; 

     if (selectedrow != null) 
     { 
      int id = selectedrow.ID; 
      db.Child.Where(child => child.MasterID == id).Load(); 
     } 


     childBindingSource.DataSource = db.Child.Local.ToBindingList(); 

    } 
+0

Qu'est-ce que 'ToBindingList'? –

+0

Conserve les données locales avec la source de données de la grille en synchronisation. – Sin5k4

+0

Le deuxième LOC fonctionne-t-il? –

Répondre

1

DbSet.Local est un ObservableCollection, de sorte que vous pouvez utiliser ToBindingList(), et la liaison de données avec une grille est un bon fonctionnement.

ToList crée simplement un List<T> et la liaison de données ne communique pas les ajouts et les suppressions de la liste (je prévois que les mises à jour fonctionnent bien).

Le remède est de filtrer les données que les charges de contexte dans la liste Local:

db.Child.Where(child => selectedrow != null 
        && child.MasterID == selectedrow.ID).Load(); 
childBindingSource.DataSource = db.Child.Local.ToBindingList(); 

Cela signifie que vous devez utiliser un nouveau contexte pour chaque ensemble d'enregistrements d'enfants que vous présentez et mise à jour.

+0

Informations supplémentaires: Impossible de créer une valeur constante de type "lazyloading.Master". Seuls les types primitifs ou les types d'énumération sont pris en charge dans ce contexte. Des idées? – Sin5k4

+1

Cochez la case 'selectedrow! = Null' en dehors de la requête et utilisez une variable' var id = selectedrow! = Null? selectedrow.ID: 0' et utilise 'id' dans la requête. –

+0

Acclamations, cependant le filtrage ne fonctionne pas. Dans ma grille de détails, tous les enregistrements sont sélectionnés .... – Sin5k4