DomainDataSource, visualiser l'ajout dans un Datagrid
Bonjour,
Dans une business application, j'ai souvent besoin d'ajouter un élément dans un datagrid. Par exemple si j'ai 4 points de ventes affichés dans mon datagrid, je peux vouloir en ajouter un cinquième....
J'ajoute le point de vente via une childWindow.
Le problème, c'est que quand je referme ma ChildWindow, le 5ème point de vente que je viens de créé n'apparait pas directement dans le datagrid. Je dois donc changer de page puis revenir sur mon datagrid pour constater qu'il est bien créé !
Voici le code:
Ma page appellante est" PointDeVentePage.xaml" qui comprend un bouton "btnAddPdv" qui ouvre ma childWindow "New_pointDeVente" et j' ajoute un Handler sur close de ma ChildWindow qui me ramènera dans la sub "NewPdv_Close"
Code:
1 2 3 4 5
| Private Sub btnAddPdv_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs)
Dim frm As New New_PointDeVente()
AddHandler frm.Closed, AddressOf NewPdv_Close
frm.Show()
End Sub |
dans ma ChildWindow, j'ai un bouton OK qui enregistre et ajoute une entité"GroupeUtilisateurTbl":
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| Private Sub OKButton_Click(ByVal sender As Object, ByVal e As RoutedEventArgs) Handles OKButton.Click
Dim monPdv As New GroupeUtilisateurTbl 'ça c'est une entité "pointdevente"
Dim ctx As New J_Context 'ça c'est mon datacontexte
Try
monPdv.GroupUtilName = Trim(txtName.Text)
....
ctx.GroupeUtilisateurTbls.Add(monPdv) 'ici j'ajoute mon entité à mon contexte
ctx.SubmitChanges(AddressOf callback_monPdvAdd, Nothing) 'pour être sur de ne pas retourner à ma fenêtre appelante avant que mon entité ne soit chargée, je fais un callback
Catch ex As Exception
Return
End Try
End Sub |
Code:
1 2 3 4 5 6 7 8 9 10 11
| Private Sub callback_monPdvAdd(ByVal so As SubmitOperation)
'ici je fais des tests sans intérêt
' mais je fais un second callback qui se déclenche que quand ma submitOpération est terminée
AddHandler so.Completed, AddressOf callback_ajoutFini
End Sub
Private Sub callback_ajoutFini(ByVal sender As System.Object, ByVal e As System.EventArgs)
'et seulement à ce moment ci, je reviens dans ma fenêtre appelante
Me.DialogResult = True
End Sub |
Pour ceux qui ont suivi jusqu'ici :)
je reviens dans:
Code:
1 2 3 4 5 6
| Private Sub NewPdv_Close(ByVal sender As System.Object, ByVal e As System.EventArgs)
If sender.dialogresult Then
'j'ai rien de spécial à faire ici sauf de tenter de rafraichir mon domain datasource
refreshPdvDataGrid()
End If
End Sub |
Et donc: (les commentaires sont dans le code)
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| Private Sub refreshPdvDataGrid()
'à ce stade, je compte le nombre de points de ventes de mon domaineDatasource et ils ne sont que 4 (le 5ème que je viens de rajouté n'apparait pas)
PointDeVenteDS.DomainContext.Load(CType(PointDeVenteDS.DomainContext, J_Context).GetGroupeUtilisateurTblQuery, LoadBehavior.RefreshCurrent, False)
'après le load, c'est inchangé !!!, toujours que 4
'et pourtant, si je fais
Dim ctx As New J_Context
ctx.Load(ctx.GetGroupeUtilisateurTblQuery, AddressOf cb_test, Nothing)
End Sub
Private Sub cb_test(ByVal lo As ServiceModel.DomainServices.Client.LoadOperation(Of GroupeUtilisateurTbl))
'si je boque mon code ici, ma variable "lo" m'indique bien 5 entités
End Sub |
Et c'est donc insuportable de devoir sortir de la page et revenir pour rafraichir le datagrid.
Quelqu'un peut-il me sauver ?:help:
Merci d'avance