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

VB.NET Discussion :

Rafraichissement DataGridView temps réel


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 31
    Par défaut Rafraichissement DataGridView temps réel
    Bonjour à tous,

    Contexte :
    dév en VB.net et serveur BDD Postgresql en LAN.

    J'ai une liste d'enregistrements, sur une Datagridview, qui doit afficher des données toujours à jour (30 utilisateurs simultanés qui peuvent intervenir sur chaque enregistrement).

    Les utilisateurs ouvrent la liste en début de journée, traitent les interventions une à une jusqu'à ce que toutes soient clôturées.
    (traiter une intervention correspond à double cliquer sur une ligne de la datagrid qui ouvre un form qui affiche le détail de l'intervention.)


    Comment feriez-vous pour que cette datagridview affiche des données toujours à jour et sans casser les éventuels filtres ou tris qui seraient mis en place sur la datagrid ?


    J'espère avoir été clair,
    Merci pour votre aide
    Yo

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Si tu utilises un DataSet, il suffit de refaire un Fill sur la table concernée ; ça rafraichit le contenu, et si le DataGridView est lié au DataSet, il sera aussi rafraichi. Les filtres et tris en place ne changent pas.

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 31
    Par défaut
    Merci pour ta réactivité Thomas

    C'est effectivement un dataset mais la requête est assez lourde et met plus de 10 secondes à afficher les données (14 800 lignes).
    Le fait de relancer un Fill ne sera pas confortable pour les utilisateurs.

    En gros, les utilisateurs doivent avoir une liste d'interventions qui évolue au fil de la journée. Si un utilisateur met à jour un enregistrement, j'aimerais que la ou les cellules concernées se mettent à jour dans la liste des autres utilisateurs sans intervention humaine.
    Un timer serait approprié mais je ne veux pas que la liste se réinitialise pendant que les utilisateurs travaillent dessus.

    J'essaie de réduire le jeu de données mais le problème de rafraichissement resterait le même.

    Peut-être que ma méthode n'est pas la bonne, comment procèderais-tu ?

    Merci pour ton aide

  4. #4
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    à la base il n'y a que 2 solutions, qui peuvent se concevoir de manières différentes

    la 1ère c'est de réexécuter la requete entière
    la 2ème c'est d'être averti d'un changement

    réexécuter la requete entière, ca peut se faire de manière intelligente sur un autre thread et ensuite ne modifier que les cellules du datagridview correspondantes
    néanmoins même si c'est une solution à peu près simple c'est toujours idiot de tabasser 30x 15k lignes pour trouver un éventuel changement d'une case

    pour être averti du changement il y a des tas de solutions, certaines sont à penser avant le développement
    - certains sgbdr comme sql server (payant seulement) peuvent faire de la notification de requete, à savoir suite à un executereader avoir un évènement de levé côté vb si les données ont changé
    ca reste très moyennement performant, et ca ne vous dit pas ce qui a changé, il faut quand même relire tout
    - une autre solution est de faire une table qui contient les lignes mises à jour, avec par exemple un trigger sur la table à vérifier qui fait des inserts sur cette table avec les lignes mises à jours (id et type de maj par exemple, avec une info de version ou de client ayant lu l'info)
    ensuite il suffit de faire un thread qui vient lire cette table (donc quelques lignes, puis va lire dans la vraie table pour les ajouts/modifications là aussi quelques lignes avec where sur l'id) et répercutes les actions sur le dgv (ajout/modification/suppression)
    - la meilleure solution reste le serveur, un exe (ou webservice iis) qui est le seul à pouvoir accéder à cette table, et les clients s'y connectent pour obtenir la liste, si un client ajout/modifier/supprime il ne le fait pas sur la table, mais demande au serveur de le faire
    le serveur le fait puis vu qu'il a une liste des clients connectés, il leur envoie la modification
    avec wcf ca peut se faire assez facilement (en .exe ou via iis)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 31
    Par défaut
    Parfait, merci beaucoup pour vos réponses

    La solution du serveur se recoupe avec ce que je craignais devoir faire
    Mais il me semble que c'est effectivement la plus adaptée (pour le moment )

    Reste à voir si le serveur intermédiaire ne va pas trop me pénaliser en terme de performances.

    Je laisse la discussion ouverte quelques jours au cas où une personne aurait une autre piste.

    Encore Merci
    Yo

  6. #6
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    Citation Envoyé par yoyogott Voir le message
    Reste à voir si le serveur intermédiaire ne va pas trop me pénaliser en terme de performances.
    au contraire je pense
    15k lignes, avec 2 dates, 2 entiers et un string de 200 chars ca fait dans les 3 Mo, ton serveur peut garder toute la table en RAM pour ne pas refaire de select en permanence
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

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

Discussions similaires

  1. Comment faire du rafraichissement temps réel?
    Par yvon_huynh dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 15/11/2008, 15h47
  2. [MFC] graphique temps réel
    Par _Thomas_ dans le forum MFC
    Réponses: 10
    Dernier message: 01/06/2004, 11h56
  3. Voir requête éxécuté en temps réel ?
    Par [DreaMs] dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 08/01/2004, 14h52
  4. cubes temps réel en ROLAP
    Par Guizz dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 09/07/2003, 16h36
  5. Durée d'un traitement temps réel
    Par Almex dans le forum C
    Réponses: 5
    Dernier message: 29/03/2003, 14h15

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