IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Silverlight Discussion :

DomainDataSource, visualiser l'ajout dans un Datagrid


Sujet :

Silverlight

  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    876
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 876
    Par défaut 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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 ?

    Merci d'avance

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    876
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 876
    Par défaut
    Bonjour,

    Je vois que ce sujet ne passionne pas les foules... Il faut dire que tout le monde n'utilise pas RIA services (et sans doute heureusement !)

    Après des tonnes de recherches sur les sites anglophones, je trouve des tonnes de gens qui rencontrent ce problème avec RIA.

    Ce qui est moins drôle, c'est d'apprendre qu'en fait des workarounds ont été proposés pour pallier à certaines défaillances des premiers RIA, que ces workarounds sont eux-mêmes la cause du problème pour les versions (november 2009 et/ou April 2010) et que donc, même quand on trouve un post intéressant, il faut savoir sur quel RIA le posteur se trouve....
    (pour ma part je suis toujours sur RIA april10 et je n'ose pas installer RIA october10)

    Bref RIA, c'est le B...

    en tous cas pour certains aspects du RIA ou on a pas le sentiment de pouvoir gérer le comportement de la bête.

    Pour mon exemple, j'ai trouvé une manière de contourner (qui est moins élégante car elle ne permet pas de rendre la ChildWindow indépendante de la fenêtre appelante), mais enfin bon.

    Pour ceux que ça intéresse:

    dans la fenêtre appelante, j'ai:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim frm As New New_PointDeVente()
            frm.DataContext = New GroupeUtilisateurTbl        
    AddHandler frm.Closed, AddressOf NewPdv_Close
            frm.Show()
    puis dans la ChildWindow, je mets simplement les valeurs de mon datacontext à jour.

    Et de retour dans mon appelant, j'ai:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     Private Sub NewPdv_Close(ByVal sender As System.Object, ByVal e As System.EventArgs)
            If sender.dialogresult Then
                CType(PointDeVenteDS.DomainContext, J_Context).GroupeUtilisateurTbls.Add(sender.datacontext)
                If PointDeVenteDS.HasChanges Then
                    Try
                        PointDeVenteDS.SubmitChanges()                
    Catch ex As Exception : Message = ex.ToString
                    End Try
                End If
            End If
               End Sub
    et là j'ai mon datagrid qui se met à jour

  3. #3
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    En fait je pense que ça vient du VB.NET

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    876
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 876
    Par défaut
    Citation Envoyé par Skyounet Voir le message
    En fait je pense que ça vient du VB.NET
    Une fois n'est pas coutume, mais ici tu te trompes....
    Car tous les exemples que j'ai trouvé étaient bien en C#

    D'ailleurs, je me souviens du temps ou sur Developpez on se demandait s'il valait mieux choisir c# ou vb et la réponse était clairement "faites ce que vous voulez, celà revient au même..."

    J'ai il est vrai opté pour VB et je le regrette amèrement car 98 % des exemples sont en C#.

    Donc, j'ai pris la résolution de commencer les nouveaux projets en C# ...

  5. #5
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Nan je dis juste que j'arrive pas à lire tes posts à cause du VB.NET (et je pense ne pas être le seul). Du coup j'ai toujours du mal à te répondre.

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    876
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 876
    Par défaut
    Ben oui, tu confirmes bien que les "experts" se sont depuis longtemps orientés vers C#.

    Je te remercie d'autant plus pour les (nombreuses) fois ou tu m'as apporté des solutions d'avoir fait l'effort de switcher vers VB.

    A propos, dans un même projet, peut on mélanger des classes VB avec des classes C# ? Si oui, ça me permettrait de convertir le tout en douceur...

  7. #7
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Citation Envoyé par Golzinne Voir le message
    Ben oui, tu confirmes bien que les "experts" se sont depuis longtemps orientés vers C#.

    Je te remercie d'autant plus pour les (nombreuses) fois ou tu m'as apporté des solutions d'avoir fait l'effort de switcher vers VB.

    A propos, dans un même projet, peut on mélanger des classes VB avec des classes C# ? Si oui, ça me permettrait de convertir le tout en douceur...
    En déplaçant tes classes dans de nouvelles assembly oui. Dans le même projet non.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 01/03/2010, 21h32
  2. [VB.NET]Ajout de colonnes dans un datagrid
    Par kirdrik2000 dans le forum Windows Forms
    Réponses: 5
    Dernier message: 16/02/2006, 00h04
  3. [VB.NET] ajouter combobox dans un datagrid
    Par HULK dans le forum Windows Forms
    Réponses: 6
    Dernier message: 27/10/2005, 14h30
  4. [VB.NET] Ajout dans un datagrid
    Par geget dans le forum ASP.NET
    Réponses: 3
    Dernier message: 03/12/2004, 19h54
  5. [C#] Ajout de colonne dans un DataGrid
    Par pc152 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 22/09/2004, 17h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo