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

Windows Forms Discussion :

[ADO] Filtrage de table


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Par défaut [ADO] Filtrage de table
    Bonjour,

    J'ai une table T1, dont la vue V1 est liée à un datagridview. La clé primaire est Id1.

    J'ai une deuxième table T2 qui contient la clé étrangère Id1.

    Ma question porte sur le filtrage du datagridview.

    Pour cela, j'ai une combo où l'on choisit une valeur de filtre de T2. De là je voudrais aller récupérer tous les Id1 de T2 vérifiant la condition, et ainsi modifier le rowfilter de V1 en "Id1 IN (...)".

    Quel est le meilleur moyen de récupérer cette liste d'identifiant Id1 ?

    Pour l'instant j'ai une solution, mais je pense qu'elle est un peu lourde pour les perfs :
    - Je créée une vue sur T2 = V2
    - Je filtre cette V2 par la valeur de ma combo
    - Je fais une itération sur les enregs de cette vue pour récupérer tous mes Id1. C'est ce dernier point qui ne me satisfait qu'à moitié : si ma vue devient balèze, itérer sur tous les résultats, c'est pas top. D'autant plus que Id1 n'étant qu'une clé étrangère, je peux l'avoir en plusieurs exemplaires, ce qui est inutile pour construire mon filtre final ( "Id1 in (...liste...)" ).

    Si j'ai été clair (je sais que non) et/ou que vous m'avez néammoins compris, je suis à l'écoute de votre avis.


  2. #2
    Expert confirmé
    Avatar de bidou
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2002
    Messages
    3 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 055
    Par défaut
    il vaudrait mieux faire une requête du type Where Champs = MaValeur Group By Id1 et lire les valeurs retournées

  3. #3
    Membre Expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Par défaut
    Merci de m'avoir lu.

    J'ai bien pensé à la requête, mais ma table T2 est aussi utilisée pour afficher des données dans une autre grille.

    Si je change le select, l'affichage changera.

    Donc le fond de mon problème, c'est qu'il me manque un élément de compréhension pour travailler avec les datasets. Allez, je me lance à poser la question qui doit être triviale, mais qui me bloque un peu :

    - comment effectuer des requêtes esur les tables d'un dataset, et comment en récupérer le résultat ?

    D'avance merci,

    JM

    --- edit ---

    Je pourrais cloner la table T2 pour effectuer les requêtes sur la nouvelle, mais encore une fois, pour les perfs, c'est moyen non ?

  4. #4
    Expert confirmé
    Avatar de bidou
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2002
    Messages
    3 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 055
    Par défaut
    tu peux utiiser un DataReader sur la source de données et non sur le Dataset.

    Si tu veux travailler sur le Dataset c'est un peu plus compliqué puisque la notion de regroupement n'est pas géré par les filtres. Dans ce cas, ton parcours des éléments filtrés est une solution correcte.

  5. #5
    Membre Expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Par défaut
    Merci de cette réponse claire.

    Je vais effectivement garder mon parcours, le DataReader n'étant pas envisageable car je veux travailler en déconnecté.

    Merci,

    JM

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

Discussions similaires

  1. [ADO.NET] 2 tables dans le Datagrid
    Par ricil78 dans le forum Accès aux données
    Réponses: 7
    Dernier message: 04/06/2010, 13h38
  2. [D7-ACCESS-ADO] Joindre deux tables
    Par dleu dans le forum Bases de données
    Réponses: 6
    Dernier message: 25/11/2006, 14h16
  3. [D7],[ADO] : ordonner une table avec des champs référencés
    Par iam dans le forum Bases de données
    Réponses: 3
    Dernier message: 07/11/2006, 21h36
  4. [VS2003+ADO.NET]DtSet.Tables("TC").Select
    Par Jopzeut dans le forum Visual Studio
    Réponses: 3
    Dernier message: 16/03/2006, 20h18
  5. [ADO] Nom des tables incomplet.
    Par CLP dans le forum XMLRAD
    Réponses: 1
    Dernier message: 07/06/2005, 09h23

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