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 :

RIA, modifier l'UI lors d'une modification des données cotés serveur


Sujet :

Silverlight

  1. #1
    Membre éclairé Avatar de Mozofeuk
    Inscrit en
    Novembre 2007
    Messages
    326
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 326
    Par défaut RIA, modifier l'UI lors d'une modification des données cotés serveur
    Bonjour à tous,

    J'affiches des objets dans une Datagrid à l'aide de RIA. Ces objets possèdent des champs qui sont modifiés à intervalles réguliers coté serveur à l'aide de procédures stockées ! Je voudrais afficher la modification de ces données en temps réel dans ma DataGrid, donc aujourd'hui j'ai un timer qui me permet de relancer la requête toutes les X secondes.

    Le problème c'est qu'il considère à chaque fois que se sont de nouveaux objet(car je refais la même requête) je suis donc obligé de vider la DataGrid et de la re-remplir avec les nouvelles données à chaque fois, du coup je perd le selectedItem à chaque fois.

    Y'aurait-il un moyen de seulement updater/actualiser ces données plutôt que de tout recharger à chaque fois ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
            DispatcherTime = new DispatcherTimer();
            DispatcherTime.Tick += new EventHandler(DispatcherTime_Tick);
            DispatcherTime.Interval = new TimeSpan(0, 0, time);
            DispatcherTime.Start();
     
            void DispatcherTime_Tick(object sender, EventArgs e)
            {
                LoadOperation = _dbContext.Load(_dbContext.GetObjectQuery(),
                    _loadBehavior =>{
                        Datagrid.ItemsSource = _loadBehavior.Entities;
                    },null);
            }

  2. #2
    Membre confirmé
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Novembre 2011
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Novembre 2011
    Messages : 104
    Par défaut
    Salut!
    en stockant ton selectedItem dans une instance temporaire puis en la réaffectant juste après ton load, peut-être ??

  3. #3
    Membre éclairé Avatar de Mozofeuk
    Inscrit en
    Novembre 2007
    Messages
    326
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 326
    Par défaut
    Bon à défaut de trouver mieux c'est ce que je fais, je stock l'ID du selectedItem et je reforce le selectedItem de la DataGrid une fois les objet chargés...

    Par contre on voit bien que c'est de-sélectionné puis re-sélectionné, bref je ne suis pas vraiment satisfait...

  4. #4
    Membre Expert
    Avatar de Samuel Blanchard
    Homme Profil pro
    Expert .NET
    Inscrit en
    Février 2010
    Messages
    1 504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Activité : Expert .NET

    Informations forums :
    Inscription : Février 2010
    Messages : 1 504
    Par défaut
    Si ton objet comporte un ID tu peux peut-être mettre à jour la collection sans pour autant la réaffecter. Ainsi tu ne perdras pas la sélection du DataGrid.

  5. #5
    Membre éclairé Avatar de Mozofeuk
    Inscrit en
    Novembre 2007
    Messages
    326
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 326
    Par défaut
    Merci Samuel,

    Tu aurais un lien ou un petit bout de code décrivant ce dont tu parles stp ?

  6. #6
    Membre Expert
    Avatar de Samuel Blanchard
    Homme Profil pro
    Expert .NET
    Inscrit en
    Février 2010
    Messages
    1 504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Activité : Expert .NET

    Informations forums :
    Inscription : Février 2010
    Messages : 1 504
    Par défaut
    Non mais je vais essayé d'être plus clair

    Lorsque tu effectues un remplacement de l'ItemsSource de ton DataGrid tu lances l'ensemble des méthodes chargé de représenter ton tableau (incluant la selection de l'item).
    Si au lieu de réaffecter une collection à l'ItemsSource, tu la conserves dans un coin pour la modifier tu ne relancera que l'affichage nécessaire. Comme c'est une ObservableCollection elle devrait se mettre à jour toute seule dans le cas d'un ajout ou d'un retrait. Pour les modifications effectuées sur l'objet en tant que tel, il faut qu'il dispose d'un ID commun entre les objets de ton ObservableCollection et les objets tous frais de ta base de données (en gros tu mets à jours les valeurs dont les objets existants comportent le même ID).

  7. #7
    Membre éclairé Avatar de Mozofeuk
    Inscrit en
    Novembre 2007
    Messages
    326
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 326
    Par défaut
    Ok merci au final c'est un truc comme ça que j'ai fait.

    Je laisse mes objet initiaux dans ma Datagrid, et je réaffecte uniquement les propriétés qui changent régulièrement via mon ObservableCollection bindée sur l'itemsSource de ma Datagrid.


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

Discussions similaires

  1. Réponses: 0
    Dernier message: 31/10/2011, 17h18
  2. Réponses: 16
    Dernier message: 19/11/2007, 17h32
  3. erreur OLE DB lors d'une modification
    Par flo456 dans le forum ASP
    Réponses: 2
    Dernier message: 24/05/2007, 14h26
  4. Réponses: 20
    Dernier message: 03/04/2007, 16h45
  5. Réponses: 1
    Dernier message: 14/12/2006, 23h06

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