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 :

Rafraichissement d’une grille « détails » ne s’opère pas


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 Rafraichissement d’une grille « détails » ne s’opère pas
    Bonjour,

    En très résumé, lors d'un changement par code du contenu d'une grille, il m'est impossible d'en rafraichir le contenu.

    En beaucoup plus détaillé:

    Sur une page j’ai deux grilles, l’une de Catégories et l’autre de Vêtements.
    Une catégorie contient zéro à n vêtements.
    Ma page doit permettre d’entrer de nouvelles catégories et de nouveaux vêtements.
    L’utilisateur doit être capable de classer les vêtements d’une catégorie dans l’ordre qu’il souhaite.
    J’ai donc mis dans ma table vêtements un champ « VetOrdre » qui me permet de retenir l’ordre dans lequel les vêtements sont classés.
    J’ai donc par exemple pour la catégorie « Chemises » les vêtements suivants :
    (Identifiant, libellé, ordre)
    3 Chemise en soie 0
    1 Chemise en coton 1
    2 Chemise en lin 2
    En dessous de ma grille, j’ai un bouton « remonte » qui me permet de changer l’ordre du vêtement actuellement sélectionné.
    Sur l’exemple précédent, si je suis positionné sur "Chemise en coton" et que je pousse sur "remonte", je vais obtenir :
    1 Chemise en coton 0
    3 Chemise en soie 1
    2 Chemise en lin 2
    L’action qui se passe dans « remonte » est la suivante :
    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
    19
    Private Sub btnRemonteVetement_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs)
            If GrilleVetement.SelectedItem Is Nothing Then Return
            'doit d'abord découvrir si le vêtement sélectionné n'est pas le premier de la liste
            If CType(GrilleVetement.SelectedItem, Vetement).VetOrder > 0 Then
                'je diminue l'ordre du vêtement sélectionné de 1
                CType(GrilleVetement.SelectedItem, Vetement).VetOrder -= 1
                'je me positionne sur le vêtement précédent
                GrilleVetement.SelectedIndex -= 1
                'j'augmente l'ordre du vêtement précédent de 1
                CType(GrilleVetement.SelectedItem, Vetement).VetOrder += 1
                'je me positionne à nouveau sur le vêtement original
                GrilleVetement.SelectedIndex += 1
     
                'je sauve mes changements d'ordre
                save()
                'je tente de rafraichir l'écran
                RefreshGrilleVetement(Me.GrilleCategories.SelectedItem.CatId())
           End If
        End Sub
    Bien que l’ordre à bien été changé dans ma table, et malgré la fonction RefreshGrilleVetement, à l’écran, aucun rafraichissement de la grille n’a eu lieu et c’est encore l’ancien ordre qui apparait.
    Voici le code de ma fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub RefreshGrilleVetement(ByVal maCategId As Integer)
     
            CType(source.DomainContext, LaundryContext).Vetements.Clear()
            GrilleVetement.ItemsSource = Nothing
     
     
            Me.GrilleVetement.ItemsSource = CType(source.DomainContext, LaundryContext).Vetements
     
            source.DomainContext.Load(CType(source.DomainContext, LaundryContext).GetVetementsByCatIdQuery(maCategId))
     
        End Sub
    Il faut encore savoir que « GetVetementsByCatIdQuery(maCategId) » me retourne tous les vêtements d’une catégorie classés par « VetOrdre »
    La seule méthode pour rafraichir ma grille est de me positionner sur une autre catégorie, (par exemple « Pantalons », et de revenir sur ma catégorie « Chemises ».
    Et pourtant, ….
    Le code utilisé lors d’un changement de catégorie est le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub GrilleCategories_SelectionChanged(ByVal sender As System.Object, ByVal e As System.Windows.Controls.SelectionChangedEventArgs)
            If GrilleCategories.SelectedItem Is Nothing Then Return       
     
            RefreshGrilleVetement(Me.GrilleCategories.SelectedItem.CatId)
     
     
        End Sub
    Et il utilise donc la même fonction que précédemment !

    Pour être tout à fait complet, voici la définition xaml de ma grille :
    <dataataGrid x:Name="GrilleVetement" a AutoGenerateColumns="False" RowEditEnded="GrilleVetement_RowEditEnded" ItemsSource="{Binding DomainContext.Vetements, ElementName=source}">
    Si quelqu'un a une idée, elle est la bienvenue.

  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 à tous,

    Je voudrais porter à votre connaissance, une observation nouvelle.

    En fait, sur un bouton "remonte", je modifie les données d'une grille et puis je lance une fonction de rafraichissement de la grille. Mais rien n'y fait, l'apparence de ma grille ne change pas.

    Par contre !

    Si sur ce même bouton "remonte" je modifie de la même manière les données de ma grille et que, sur UN AUTRE BOUTON, je mets le (même) code de rafraichissement de ma grille, tout se passe impeccablement.

    Quelqu'un peut-il m'expliquer ce comportement ?

  3. #3
    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
    On m'a donné la solution !

    En fait, comme toujours en silverlight, tout se passe en asynchrone, le rafraichissement de ma grille ne doit pas intervenir trop tôt.

    Il faut donc mettre le "refreshGrilleVetements" non pas à la suite du code qui modifie le contenu de la grille mais dans la "Private Sub source_SubmittedChanges(...) qui ne sera lancée que quand les données de mon datagrid auront effectivement été mis à jour.

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

Discussions similaires

  1. Réponses: 20
    Dernier message: 18/04/2013, 15h24
  2. grille qui n'est pas attaché à aucune table
    Par da_latifa dans le forum ASP.NET
    Réponses: 3
    Dernier message: 30/12/2010, 22h22
  3. Examen 70-503 WCF : tous les détails à mémoriser ou pas ?
    Par Invité dans le forum Certifications
    Réponses: 0
    Dernier message: 03/09/2010, 19h20
  4. Réponses: 2
    Dernier message: 05/08/2008, 10h14
  5. Mon bouton détail ne fonctionne pas
    Par cedric/copy dans le forum ASP
    Réponses: 3
    Dernier message: 22/07/2008, 14h43

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