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 du binding d'un bouton


Sujet :

Silverlight

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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 du binding d'un bouton
    Bonsoir,

    Voici un problème difficile a expliquer, mais je vais essayer...

    J'ai un dataGrid "groupe" qui affiche sur chaque ligne un bouton.
    Le bouton indique le nombre d'utilisateurs déjà créés pour le groupe (grâce à un binding que j'expliquerai plus loin)
    Quand on pousse sur le bouton, j'ouvre une page qui me permet de rajouter ou d'effacer des utilisateurs.

    Mon problème, quand je ferme cette fenêtre de gestion des utilisateurs, même si j'ai fait varier le nombre de ces utilisateurs, le bouton de mon datagrid affiche toujours le nombre avant modification.

    Exemple, j'ai dans mon datagrid un seul groupe avec mon bouton qui affiche que j'ai deux utilisateurs créés pour ce groupe. Je clique sur le bouton et je crée un troisième utilisateur. Quand je ferme ma page de création de ce troisième utilisateur, les données ont bien été changées en base de données et je m'attends à voir le chiffre 3 sur mon bouton. Malheureusement, il reste à 2.

    Un peu de 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
    19
    20
    21
    22
    <data:DataGrid x:Name="GrilleResellers" ItemsSource="{Binding Data, ElementName=RevendeurDS}" AutoGenerateColumns="False"  >
                                <data:DataGrid.Columns>
                                    <data:DataGridTextColumn  Header="Nom" Binding="{Binding GroupUtilName}" Width="140" IsReadOnly="False" Foreground="Black"/>
     
                                                                   <data:DataGridTemplateColumn x:Name="bkTemplateColumn" Header="Utilisateurs"  >
                                        <data:DataGridTemplateColumn.CellTemplate >
                                            <DataTemplate x:Name="bkDataTemplate" >
                                                <Button x:Name="btnJUser"   Width="65"  Click="btnJUser_Click" ToolTipService.ToolTip="On left: number of Users, on right: number of users with Asp Login.  Click to edit" >
                                                    <StackPanel Orientation="Horizontal">
                                                        <TextBlock Text ="{Binding GroupUtilTrigNbrJUser}"/>
     
     
                                                    </StackPanel>
     
     
                                                </Button>
                                            </DataTemplate>
                                        </data:DataGridTemplateColumn.CellTemplate>
                                    </data:DataGridTemplateColumn>
     
                                </data:DataGrid.Columns>
                            </data:DataGrid>
    Mon datagrid est bindé au DomainDataSource "RevendeurDS".

    J'appelle ma page de modification des utilisateurs:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     Private Sub btnJUser_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs)
            Dim JUserMngt As New JUserPage(CType(CType(sender, Button).DataContext, GroupeUtilisateurTbl))
            AddHandler JUserMngt.Closed, AddressOf callback_JUserMngtClose
            JUserMngt.Show()
        End Sub
     
        Private Sub callback_JUserMngtClose(ByVal sender As System.Object, ByVal e As System.EventArgs)
            If sender.dialogresult Then
                'je tente de mettre à jour mon bouton...
                RevendeurDS.Clear()
                RevendeurDS.QueryName = "GetGroupeUtilisateurTbl"
            End If
        End Sub
    L'ajout des utilisateurs qui est fait directement dans la base de données déclenche un trigger qui modifie le contenu du champ "GroupUtilTrigNbrJUser" sur lequel mon bouton est bindé.

    Je devrais simplement pouvoir déclencher la mise à jour de mon domaineDataSource... mais ça ne fonctionne pas

  2. #2
    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
    Est-ce que tu fais bien un NotifyPropertyChanged de GroupUtilTrigNbrJUser ?
    Est-ce que sa valeur change au moins ?

  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
    En base de données, j'ai une table "GroupeUtilisateurTbl" qui contient (notamment):
    GroupUtilID
    GroupUtilName
    et
    GroupUtilTrigNbrJUser

    J'ai une autre table JUserTbl (avec une foreign key sur GroupUtilID)qui sur insertion ou effacement d'un enregistrement lance un trigger qui compte le nombre d'enregistrements de JUserTbl qui dépendent du GroupUtilID et qui met à jour le GroupUtilTrigNbrJUser.

    Tout se passe donc au niveau du SQLServer.

    C'est pour ça que, de retour à mon datagrid, je devrais simplement pouvoir dire à mon DataGrid "Tes données ont certainement changé, mets toi à jour"

  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
    Est-ce que tu fais bien un NotifyPropertyChanged de GroupUtilTrigNbrJUser ?
    Est-ce que sa valeur change au moins ?
    J'aurais du commencer par te répondre à ces 2 questions...

    Oui, la valeur change puisque si je quitte ma page et que j'y reviens, le bouton de mon datagrid affiche alors la bonne valeur.

    et Non je ne fais pas bien un NotifyPropertyChanged de GroupUtilTrigNbrJUser puisque c'est une valeur qui vient de mon DomainDataSource directement définie dans mon XAML:
    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
            <!--RIA Revendeur-->
            <riaControls:DomainDataSource x:Name="RevendeurDS" QueryName="GetGroupeUtilisateurTbl" LoadSize="12" AutoLoad="True"  Margin="0,0,0,20" SubmittedChanges="MonDomaineDS_SubmittedChanges" >
                <riaControls:DomainDataSource.DomainContext>
                    <MonProjetLocal:J_Context/>
                </riaControls:DomainDataSource.DomainContext>
     
                <riaControls:DomainDataSource.SortDescriptors>
                    <riaControls:SortDescriptor PropertyPath="GroupUtilName" Direction="Ascending"/>
                </riaControls:DomainDataSource.SortDescriptors>
     
                <riaControls:DomainDataSource.FilterDescriptors>
                    <riaControls:FilterDescriptor Operator="Contains" PropertyPath="GroupUtilName" Value="{Binding ElementName=filtreRevendeur, Path=Text}" IgnoredValue=""/>
                </riaControls:DomainDataSource.FilterDescriptors>
     
            </riaControls:DomainDataSource>

  5. #5
    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,

    Après de nombreuses recherches, j'ai enfin trouvé le moyen de rafraichir un datagrid qui est basé sur un domainDataSource.

    Voici le code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    myDS.DomainContext.Load(CType(myDS.DomainContext, monContext).GetGroupeUtilisateurTblQuery, LoadBehavior.RefreshCurrent, False)
    Visiblement, le LoadBehavior a une valeur par défaut qui est à "KeepCurrent" ce qui fait qu'on a beau faire des loads, des refresh,... le datagrid ne se met pas à jour. Il faut donc explicitement faire un load avec "Refreshcurrent".

    J'espère que ça pourra servir à d'autres....

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

Discussions similaires

  1. [DOM] Rafraichissement de div IE boutons radios
    Par ejilan dans le forum Général JavaScript
    Réponses: 17
    Dernier message: 14/10/2008, 15h30
  2. [ListView] Comment résoudre un problème de Binding/Multibinding rafraichissement ?
    Par Lookoum dans le forum Windows Presentation Foundation
    Réponses: 6
    Dernier message: 26/09/2008, 09h27
  3. Binding, Linq, rafraichissement et pétage de plombs
    Par tomlev dans le forum Windows Presentation Foundation
    Réponses: 5
    Dernier message: 03/07/2008, 01h09
  4. Suppression de bouton / rafraichissement
    Par Nemesis007 dans le forum MFC
    Réponses: 5
    Dernier message: 23/04/2007, 08h45
  5. [débutant] rafraichissement JTable + action bouton
    Par sqwam71 dans le forum Composants
    Réponses: 4
    Dernier message: 28/12/2005, 15h29

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