bonjour,
j'ai un soucis lors de la modification dans une GridView dont l'itemSource est une liste d'entités, à cette entité (MOUVEMENTS_DETAILS) j'ai inclus d'autres entités (exemple : MAGASINS) dont les clés sont des propriétés de navigation dans mon entité MOUVEMENTS_DETAILS
voilà comment la GridView est bindée :
1 2 3 4 5 6 7 8 9 10
|
</telerik:GridViewColumn>
<telerik:GridViewDataColumn Width="100" DataMemberBinding="{Binding ARTICLES.REF_ARTICLE, Mode=TwoWay}" Header="Réf Article" x:Name="leArticle" />
<telerik:GridViewDataColumn Width="*" DataMemberBinding="{Binding DESIGNATION, Mode=TwoWay}" Header="Désignation" />
<telerik:GridViewDataColumn Width="90" DataMemberBinding="{Binding QUANTITE, Mode=TwoWay}" Header="Quantité" />
<telerik:GridViewDataColumn Width="100" DataMemberBinding="{Binding MAGASINS.REF_MAGASIN, Mode=OneWay}" Header="Réf Magasin" x:Name="leMagasin" UniqueName="REF_MAGASIN" />
<telerik:GridViewDataColumn Width="90" DataMemberBinding="{Binding LOTS.DES_LOT, Mode=TwoWay}" Header="Réf LOT" x:Name="leLot" UniqueName="DES_LOT" />
<telerik:GridViewDataColumn Width="90" DataMemberBinding="{Binding PRIX_MOUVEMENT, Mode=TwoWay}" Header="Prix Achat" TextAlignment="Right" />
<telerik:GridViewDataColumn Width="100" DataMemberBinding="{Binding MT_LIGNE, Mode=TwoWay}" Header="Montant HT" IsReadOnly="True" TextAlignment="Right"/>
</telerik:RadGridView.Columns> |
maintenant dès que j'essaye de modifier la REF_MAGASIN par exemple ( je lui affecte une valeur choisi dans une liste a partir d'une autre fenêtre modale )
avec ce code :
1 2 3 4 5 6 7 8
|
void f_Closed(object sender, Telerik.Windows.Controls.WindowClosedEventArgs e)
{
MAGASINS mag = ((sender as TidjaraApplication.Liste.P_Fenetre_Liste).DS).MAGASINS.Where(m => m.ID_MAGASIN == myMagasins.id_magasin).FirstOrDefault();
DomainContextExtensions.Detach((sender as TidjaraApplication.Liste.P_Fenetre_Liste).DS, mag);
(((MOUVEMENTS_DETAILS)DetailsMouvementrRadGridView.CurrentCell.ParentRow.Item).MAGASINS).REF_MAGASIN = mag.REF_MAGASIN;
((MOUVEMENTS_DETAILS)DetailsMouvementrRadGridView.CurrentCell.ParentRow.Item).ID_MAGASIN = mag.ID_MAGASIN;
} |
mais lorsque je fais ça la référence magasin change dans toute les autres ligne (MOUVEMENTS_DETAILS) qui pointent vers le même magasin !!
alors j'ai essayé de modifier tout l'objet magasin :
(((MOUVEMENTS_DETAILS)DetailsMouvementrRadGridView.CurrentCell.ParentRow.Item).MAGASINS)=mag;
mais ceci me renvoie cette erreur
An entity with the same identity already exists in this EntitySet.
!! je ne peux pas me contenter de modifier la clé étrangère par :
1 2
|
((MOUVEMENTS_DETAILS)DetailsMouvementrRadGridView.CurrentCell.ParentRow.Item).ID_MAGASIN = mag.ID_MAGASIN; |
les autres modification doivent apparaitre dans la GridView bindée !
j'ai compris par la suite que chaque ligne MOUVEMENTS_DETAILS n'a pas sa propre entité MAGASINS et que plusieurs pointent vers la même..
j'ai récupéré les lignes MOUVEMENTS_DETAILS avec cette requête :
1 2
|
this.ObjectContext.MOUVEMENTS_DETAILS.Include("MAGASINS").Include("LOTS").Include("ARTICLES").Where(m => m.ID_MOUVEMENT == idMouvement); |
dois je procéder autrement ??!!
j'espère que j'ai été claire
merci d'avance
j'ai oublié de préciser que je travaille avec Silverlight 4 , et que je suis débutante en Entity Framework !
Partager