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

C# Discussion :

UN Dataset, DES Form : comment partager un dataset avec plusieurs formulaires ?


Sujet :

C#

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Février 2009
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 163
    Points : 120
    Points
    120
    Par défaut UN Dataset, DES Form : comment partager un dataset avec plusieurs formulaires ?
    Bonjour à tous,

    Je me doute que la question à déjà du être posé sur Développez, puisque c'est le cas sur le net, mais je ne trouve pas de réponses pertinentes.

    En C#, pour la première fois, j'utilise un DataSet avec plusieurs formulaires.

    Le problème c'est que dans la partie designer de mes Form, lorsque j'utilise un dataset, il me re-déclare une instance de celui-ci dans chaque Windows Form.

    A mes yeux cela à deux inconvénient majeurs :
    • la clarté du code, alors que la tendance serait à la séparation du code (MVC, etc), le designer fait sa propre soupe en mélangeant tout.
      Je voudrais isoler mon Dataset dans un composant (en Design Pattern Singleton par exemple), et utiliser ce composant (contenant le Dataset et les TableAdapter) dans le Designer de mes Form. Histoire de ne pas avoir 100 instance des mêmes objets...
    • le gaspillage des ressources la machine (temps de chargement des tables utilisées + espace mémoire) : re-déclaration et re-chargement des DataSet, DataTable, TableAdapter, Binding Source dans chaque Windows Form !


    Bref, du coup je me prend la tête sur ça. Est-ce que certains sont déjà confronté au problème et ont des conseils sur ce point là ?

    Merci de votre aide.

  2. #2
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Dans la partie designer de mes Form, lorsque j'utilise un dataset
    Au lieu de créer les Datasets en conception, mieux vaut les créer dynamiquement dans une procedure appellée par la forme principale et passer le(s) DataSet(s) dans une fonction d'initialisation des formulaires.
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Février 2009
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 163
    Points : 120
    Points
    120
    Par défaut
    Je ne vois aucun inconvenant à déclarer un dataset à la main, dans mon code, mais après comment je fais pour avoir celui du coté designer ? Je ne le trouve plus lorsque je veux faire du databinding avec un composant par exemple !

    Cela veux-t-il dire que tout doit être fait à la main ensuite ? Que l'on doit ce passer du designer pour faire tout les bindind ?

    Images attachées Images attachées  

  4. #4
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Cela veux-t-il dire que tout doit être fait à la main ensuite ? Que l'on doit ce passer du designer pour faire tout les binding ?
    Ben ... oui!

    ou alors faire hériter toutes les formes d'une forme commune dans laquelle on ne fait que définir le dataset commun.
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  5. #5
    Membre du Club
    Inscrit en
    Octobre 2002
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 54
    Points : 55
    Points
    55
    Par défaut
    Pour ma part quand j'utilise un dataset , je crée deux projet un pour mes forms et un pour mon dataset et mes classes métiers .
    Au démarrage de l'application j'instancie une fois le dataset , ensuite je le passe en paramètre a toutes mes formes.

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Février 2009
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 163
    Points : 120
    Points
    120
    Par défaut
    Ben ... oui!
    Pfffffffff... je me vois mal faire tous les bindings de composant grid super customisé à la main.... ça crain.

    Pour ma part quand j'utilise un dataset , je crée deux projet un pour mes forms et un pour mon dataset et mes classes métiers .
    Au démarrage de l'application j'instancie une fois le dataset , ensuite je le passe en paramètre a toutes mes formes.
    Oui, mais pour faire ça, t'es obligé de casser le code du designer non ? Ou alors tu fais tout à la main après ?

  7. #7
    Membre du Club
    Inscrit en
    Octobre 2002
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 54
    Points : 55
    Points
    55
    Par défaut
    Ecoute cela fait un petit temps que j'ai plus travailler avec les datasets , mais je viens de refaire la manœuvre rapidement .

    Crée un projet test avec ton dataset a l'interieur , dans ton autre projet forms tu fais référence a ton projet test.

    Comme source de donnée tu choisis objet , tu sélectionne alors le dataset de ton projet test.

    Quand tu va utiliser le designer tous fonctionne correctement , si tu fait un glisser deposer de ta source vers ta forms cela va générer tous le code normalement bindingsource dataset etc ...

    si tu ne veux pas du dataset générer sur ta forms , supprime le et dans ton bindingsource tu chois comme source ton projet test.ton dataset.

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2007
    Messages : 82
    Points : 89
    Points
    89
    Par défaut
    J'ai mal au coeur... des datasets ... fait des classes c'est plus plaisant... mais bon c'est toi qui voit.

    Voilà une solution toute simple que j'ai utilisé souvent qui ressemble beaucoup à du access comme méthode

    Dans ta form principale tu déclare ton dataset public:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public DataSet MonDataSet = new DataSet();
    Et tu l'appelles dans tes Autres forms
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    (MonApplication)Application.OpenForms["NomDeLaForm"]).MonDataSet.update()...;
    (MonApplication)Application.OpenForms["NomDeLaForm"]).MonDataSet.insert()...;
    Tu peux aussi le déclarer dans la class Program.cs et l'utiliser par la suite, mais 2 solution dans un post c'est épuisant.

Discussions similaires

  1. comment partager un fichier avec VB6
    Par Virtualité dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 24/02/2011, 17h41
  2. Comment partager un calendrier entre plusieurs personnes
    Par beegees dans le forum Exchange Server
    Réponses: 6
    Dernier message: 18/12/2008, 13h59
  3. Réponses: 14
    Dernier message: 11/07/2008, 13h09
  4. Comment partager une imprimante avec samba ?
    Par julesboucan dans le forum Applications et environnements graphiques
    Réponses: 1
    Dernier message: 18/06/2007, 13h01
  5. Réponses: 2
    Dernier message: 30/09/2003, 15h57

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