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

Accès aux données Discussion :

relation 1-n & datagrid


Sujet :

Accès aux données

  1. #1
    Membre Expert

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 249
    Par défaut relation 1-n & datagrid
    bonjour,

    je souhaite afficher 1 seule ligne pour une relation 1-N dans mon datagrid.

    je m'explique:

    j'ai une table activite

    1 activite phytosanitaire 12H00 12H30
    2 activite phytosanitaire2 12H30 14H00

    j'ai une table est utilise

    1 produit1
    1 produit2
    1 produit3

    2 produit4

    je veux afficher dans mon datagrid

    activite phytosanitaire 12H 12H30 Produit1, Produit2, Produit3
    activite phytosanitaire 12H30 14H00 Produit4

    comment vous y prendriez vous pour obtenir ce resultat ? je veux 1 seule ligne par ligne d'activite.

    je propose d'utiliser une classe de propriete pour representer les colonnes et un array list contenant la classe en n exemplaire pour representer la table.
    Pour chaque ligne, je fais deux acces à la base, un acces à la table activite et un acces à la table de relation et je remplis l'objet.

    Pour 100 lignes dans la table, cela fera plus de 200 select dans le programme...

  2. #2
    Futur Membre du Club
    Inscrit en
    Juin 2004
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 6
    Par défaut
    Je ne connais pas la réponse mais je suis très intéressé. Il existe forcément une best practice en .net
    Il s'agit si j'ai bien compris de ressortir de 2 tables une liste d'objets contenant des objets, en si possible 1 requête.

  3. #3
    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 : 44
    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
    Déjà tu peux faire une jointure entre les 2 tables, pour obtenir:
    1 activite phytosanitaire 12H00 12H30 - produit1
    1 activite phytosanitaire 12H00 12H30 - produit2
    1 activite phytosanitaire 12H00 12H30 - produit3
    2 activite phytosanitaire 12H00 12H30 - produit4

    à partir de là, tu peux construire le texte:
    - Tu prends l'activité et le produit de la première ligne et tu crées une première ligne de texte avec ça.
    - Ensuite, à chaque ligne, si c'est la même activité que la ligne précédente, tu rajoutes le produit à la fin du texte. Sinon, tu crées une nouvelle ligne de texte avec la nouvelle activité, et ainsi de suite...

    Comme ça tu fais une seule requete en tout et pour tout

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 249
    Par défaut Fonction SQL
    je crois que j'ai resolu le probleme avec une fonction SQL qui fournit une chaine avec la liste pour chaque ligne.

    le seul inconvient, c'est qu'en terme de performance, ce n'est pas genial.

  5. #5
    Futur Membre du Club
    Inscrit en
    Juin 2004
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 6
    Par défaut
    Oui, mais j'aimerais tout de même aller plus loin sur le sujet.
    Les solutions que vous apportez m'apparaissent comme du bidouillage pour un problème classique

    Modèle relationnel :
    Un pays a plusieurs villes. J'ai donc une foreign key dans villes vers pays

    commandes
    id Prenom
    1 France
    2 Espagne
    3 Belgique

    Villes
    id paysid nom
    1 1 Paris
    2 1 Marseille
    3 1 Lyon
    4 2 Madrid
    5 2 Barcelone
    6 3 Anvers


    Je souhaite reproduire cette relation dans un Dataset. Un pays peut avoir plusieurs villes.
    Evidement, on a le problème du mapping objet-relationel qui est que
    le select avec jointure me renvoit une table à plat plutôt qu'une collection de collection d'objets
    bien rangés.
    Ce qui m'ennuie si je souhaite, par exemple, afficher un tableau imbriqué du type suivant.
    ----------------------
    | Paris |
    France | Marseille |
    | Lyon |
    ----------------------
    | Madrid |
    Espagne | Barcelone |
    Belgique| Anvers |
    ----------------------
    Comme les Dataset reproduisent la structure des données de la base, j'imagine qu'il y a
    un mécanisme simple et élégant pour remonter le dataset Pays-ville déjà rempli sans avoir à trop coder.
    Mais je ne trouve pas

  6. #6
    Membre Expert

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 249
    Par défaut Solution classique.
    La solution consiste à avoir un datagrid avec les pays et un data grid esclave avec les villes par pays.

    si tu veux afficher les villes dans le datagrid initial, tu es oblige de "bidouiller"...

  7. #7
    Futur Membre du Club
    Inscrit en
    Juin 2004
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 6
    Par défaut
    Je je trouve pas la technique très satisfaisante :
    J'ai été voir sur ce lien par exemple http://www.devasp.net/net/search/res/r71427.html

    Ca peut marcher si on est prêt à faire une requête SQL pour chaque détails, mais je veux afficher des listes de plus de 500 pays avec leurs villes (mon problème est plus complexe, je reprend juste cet exemple)
    Je ne vais pas faire 500 requêtes pour afficher une page !

    Je peux bricoler mais ca me paraît étrange qu'il n'existe pas de solution simple à mon problème qui me semble classique

  8. #8
    Membre Expert

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 249
    Par défaut Master-slave
    Je ne comprend pas pourquoi tu dis cela :
    Ca peut marcher si on est prêt à faire une requête SQL pour chaque détails, mais je veux afficher des listes de plus de 500 pays avec leurs villes (mon problème est plus complexe, je reprend juste cet exemple)
    Je ne vais pas faire 500 requêtes pour afficher une page !
    il n'y a qu'une seule requete pour le slave... le seul probleme, c'est que l'utilisateur qui veut voir les villes d'un pays doit cliquer sur le master.

    Je reconnais que j'aurais aimé trouver une solution élégante pour avoir l'ensemble de l'information dans un seul datagrid...mais la technique, c'est souvent des compromis...

  9. #9
    Futur Membre du Club
    Inscrit en
    Juin 2004
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 6
    Par défaut
    Je veux bien faire des compromis mais je veux coder "propre". Et je ne veux pas que mes villes s'affichent quand je clique dessus mais dès le début.

    Je suis plus habitué au monde ruby on rails que .net et... c'est beaucoup plus simple ou alors j'ai mal compris mais je ne crois pas.

    Recherchez eager loading dans cette api : C'est exactement ce que je cherche à faire : Remonter en une seule requête de la base des objets... et les objets "naviguants" autour.

    http://api.rubyonrails.com/classes/A...ssMethods.html
    Loin de moi l'idée de lancer un sujet sur la supériorité de ruby on rails ! La façon dont sont pensés les datasets me font imaginer qu'il y a une méthode équivalente en .net

    Maintenant, je peux vivre sans mais c'est vraiment un besoin récurrent dans l'appli que je code.

  10. #10
    Futur Membre du Club
    Inscrit en
    Juin 2004
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 6
    Par défaut
    Apparement la solution c'est linq et entity framework, mais c'est dispo uniquement dans le framework .net 3.5

  11. #11
    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 : 44
    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 ne peux pas utiliser le framework 3.5, tu dois pouvoir t'en sortir avec NHibernate je pense...
    Mais bon, pour un truc aussi simple je sais pas si ça vaut la peine.

Discussions similaires

  1. DataGrid et Dataset avec relation
    Par Koyote dans le forum ASP.NET
    Réponses: 7
    Dernier message: 24/01/2007, 12h06
  2. DataGrid relation pere/fils
    Par TheBlackReverand dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 03/01/2007, 19h08
  3. [ADO.NET] remplaire datagrid "depuis table relation multiple"
    Par hoda dans le forum Accès aux données
    Réponses: 3
    Dernier message: 05/12/2006, 09h49
  4. [VB.NET] DataGrid et relations
    Par Birdie dans le forum Windows Forms
    Réponses: 6
    Dernier message: 15/10/2004, 14h54

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