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 :

Cumuler plusieurs Filtre dans un DGV


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2013
    Messages
    263
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 263
    Par défaut Cumuler plusieurs Filtre dans un DGV
    Bonjour,

    Maintenant que j'arrive a réaliser un filtre, je voudrai bien pouvoir combiné plusieurs filtre genre si je filtre une première fois mon DGV, si je réalise un second filtre, il ne filtre que le contenu actuel de mon DGV.

    Alors j'ai vu que mon BlindingSource ne change pas, c'est-à-dire, qu'il garde son contenu initial. Si je décide de changer de filtre, il va le réaliser sur le contenu initial et non sur ce qui se trouve dans mon DGV.

    J'ai vu aussi qu'il est possible de réaliser des requetes du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bs.Filter = "artist = 'Dave Matthews' OR cd = 'Tigerlily'"
    Mais c'est vraiment pas pratique.

    Alors deux solutions me trotte dans la tête, la première est de faire une petite procédure qui enregistre les filtre activer et qui les concatène dans une long requête avant d’être utilisé comme filtre. La seconde est de modifier mon BlindingSource après chaque filtre, c'est-à-dire, enregistrer le contenu de mon DGV sur le BlindingSource, et ainsi lorsque je réalise mon filtre, il sera effectué sur un nouveau BlindingSource mais je sais pas si c'est réalisable en tous cas. J'attends vos suggestions et vos idées pour la solution la plus pratique pour un code lisible et bien programmé pour ce genre de situation.


    Merci d'avance pour vos suggestions !!

    PS: Ou alors ré-remplir ma DataTable avec ma nouvelle DGV et la recracher dans le BlindingSource ???

  2. #2
    Expert confirmé 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
    Par défaut
    Si on filtre d'abord sur l'artiste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bs.Filter = "artist = 'Dave Matthews'";
    puis sur l'année :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    string Filter2 = "artist = 1997" ;
    bs.Filter = "("+ bs.Filter + ") AND "+Filter2 ;

  3. #3
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2013
    Messages
    263
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 263
    Par défaut
    C'est possible d'avoir un filtre vide ? genre moi j'ai deux boutons, chacun applique un filtre mais si j'appuie sur mes deux boutons, je veux qu'il prend en compte mes deux filtres donc je dois avoir genre une procédure ou une variable de type string qui stock tous les requêtes en cours d'activation pour le filtre et il faut aussi que cette procédure ou variable puissent retirer un filtre particulier sur demande genre un le re-clic d'un bouton.

  4. #4
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Par défaut
    Dans ce cas il vaut mieux avoir des cases à cocher pour indiquer les filtres a appliquer et construire le filtre en fonction des cases cochées.
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  5. #5
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2013
    Messages
    263
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 263
    Par défaut
    Perso je veux la solution qui me parais la moins farfelu, je suis partie pour la solution de Graffito en pensant que bs.filter est du type String et qu'il est donc cumulable si je fait bs.filter = bs.filter + filtre2, si sa marche bien alors faire des classes serai trop compliqué et trop prise de tête mais si je dois par la suite retirer des filtres appliquer alors la classe serai une excellente idée et je prend note ^^

    PS: de toute façon je suis obligé de savoir comment concaténer deux filtres indépendant, sa sera une partie de ma future classe pour plus tard donc je retiens la leçon !!

  6. #6
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Par défaut
    Avec les cases à cocher tu peux utiliser la solution de graphito.

    Méthode CumulFiltre
    Si caseFiltre1 coché => filtre = filtre + filtre1
    Si caseFiltre2 coché => filtre = filtre + filtre2
    Etc ...

    Au final tu obtient une chaine filtre à appliquer.
    Quand l'utilisateur change ses choix, hop nouvelle chaine filtre.

    A mon avis c'est le plus simple.

    Après tes cases à cocher peuvent être construites dynamiquement suivant les filtres que tu veux autoriser à l'utilisateur.
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

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

Discussions similaires

  1. Cumuler plusieurs conditions dans une cellule
    Par roufko dans le forum Excel
    Réponses: 5
    Dernier message: 11/07/2014, 08h59
  2. Plusieurs filtre dans FindFirst , FindNext
    Par 0x44-0x43-0x53-0x43 dans le forum Langage
    Réponses: 1
    Dernier message: 05/07/2010, 18h37
  3. Réponses: 10
    Dernier message: 18/02/2009, 17h56
  4. Réponses: 1
    Dernier message: 22/08/2008, 22h38
  5. Cumuler plusieurs variables dans un lien
    Par Halima91 dans le forum Langage
    Réponses: 3
    Dernier message: 18/06/2007, 21h22

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