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

  1. #1
    Membre habitué
    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
    Points : 148
    Points
    148
    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 é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
    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 ;
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  3. #3
    Membre habitué
    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
    Points : 148
    Points
    148
    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
    Points : 5 100
    Points
    5 100
    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 habitué
    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
    Points : 148
    Points
    148
    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
    Points : 5 100
    Points
    5 100
    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.

  7. #7
    Membre habitué
    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
    Points : 148
    Points
    148
    Par défaut
    Merci beaucoup, j'ai vraiment l'impression d’être gâté, tant de savoir ^^

    Bon perso, la partie de graffito ne marche pas, je pense que c'est une autre syntaxe car je reconnais pas trop alors j'ai essayé de faire comme si c'étais une requête de type BDD et sa donne sa :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        Private Sub btnAuto_Click(sender As System.Object, e As System.EventArgs) Handles btnAuto.Click
            Dim FilterBtnClick As String
            FilterBtnClick = "Evenement = '1'"
            bs.Filter = bs.Filter & " AND " & FilterBtnClick
        End Sub
    Mais sa marche pas !!

    PS:
    Correction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub btnAuto_Click(sender As System.Object, e As System.EventArgs) Handles btnAuto.Click
            Dim FilterBtnClick As String
            FilterBtnClick = "Evenement = '1'"
            bs.Filter = bs.Filter + FilterBtnClick
        End Sub
    et cette fois sa marche ^^
    Bon je m'attaque à la classe, je suppose qu'il me faudra une variable ou propriété de type boolean pour chaque filtre et en fonction de ces variables, j'ai des méthodes qui se charge de modifier bs.filter !!

  8. #8
    Membre habitué
    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
    Points : 148
    Points
    148
    Par défaut
    Bon voila un post un peu hors sujet mais j'ai vu par la même occasion qu'il était possible de réaliser le Tri avec le Blinding Source via des requêtes sur le même principe que le filtre par contre je crois que j'ai pas besoin de cumuler les Tri pour cette partie.

    Je me pose la question s'il est nécessaire de faire une classe Tri sachant que le Tri croissant et décroissant sera activé sur chaque entête d'une colonne via un menu qui s'ouvre sur clic gauche.

    Merci d'avance pour vos suggestions !!

  9. #9
    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
    Points : 5 100
    Points
    5 100
    Par défaut
    Graphito t'as montré en exemple en C#

    Attention le premier élément ajouté au filtre doit être seul seulement ensuite il faut intercaler les "AND" ou les "OR"
    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.

  10. #10
    Membre habitué
    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
    Points : 148
    Points
    148
    Par défaut
    Oui je viens de voir, il faut obligatoirement que le premier soit sans " AND ", je pense qu'avec une classe, j'aurai pas de souci pour gérer ce genre de problème !!

  11. #11
    Membre habitué
    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
    Points : 148
    Points
    148
    Par défaut
    Alors voila une solution, c'est pas la meilleur mais elle marche.

    Je rappelle tous de même que j'ai jouer avec le nombre de filtre activé et le nombre de filtre activé qui ont était réalisé grâce à un petit système de comptage à l’intérieur de ma classe pour résoudre mon probleme du "AND" ^^.

    Voila le code de ma classe dans le module:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
        Public Class FilterDGV
            Private msFiltreManu As Boolean
            Private msFiltreAuto As Boolean
            Private msFiltreErreur As Boolean
     
            Public Property FiltreManu() As Boolean
                Get
                    Return msFiltreManu
                End Get
     
                Set(ByVal value As Boolean)
                    msFiltreManu = value
                End Set
            End Property
     
            Public Property FiltreAuto() As Boolean
                Get
                    Return msFiltreAuto
                End Get
     
                Set(ByVal value As Boolean)
                    msFiltreAuto = value
                End Set
            End Property
     
            Public Property FiltreErreur() As Boolean
                Get
                    Return msFiltreErreur
                End Get
     
                Set(ByVal value As Boolean)
                    msFiltreErreur = value
                End Set
            End Property
     
            Public Sub FiltrerDGV(bs As BindingSource)
                Dim mCountFiltreTotal As Integer = CountFiltreTotal()
                Dim mCountFiltreAppliquer As Integer
     
                bs.RemoveFilter()
                If FiltreAuto = True Then
                    If mCountFiltreTotal = 1 Then
                        bs.Filter = bs.Filter + "Evenement = '1'"
                    Else
                        If mCountFiltreAppliquer = 0 Then
                            bs.Filter = bs.Filter + "Evenement = '1'"
                            mCountFiltreAppliquer = mCountFiltreAppliquer + 1
                        Else
     
                            bs.Filter = bs.Filter + " AND " + "Evenement = '1'"
                            mCountFiltreAppliquer = mCountFiltreAppliquer + 1
                        End If
                    End If
                End If
                If FiltreManu = True Then
                    If mCountFiltreTotal = 1 Then
                        bs.Filter = bs.Filter + "Degre = 'Manu'"
                    Else
                        If mCountFiltreAppliquer = 0 Then
                            bs.Filter = bs.Filter + "Degre = 'Manu'"
                            mCountFiltreAppliquer = mCountFiltreAppliquer + 1
                        Else
     
                            bs.Filter = bs.Filter + " AND " + "Degre = 'Manu'"
                            mCountFiltreAppliquer = mCountFiltreAppliquer + 1
                        End If
                    End If
                End If
                If FiltreErreur = True Then
                    If mCountFiltreTotal = 1 Then
                        bs.Filter = bs.Filter + "Degre = 'Erreur'"
                    Else
                        If mCountFiltreAppliquer = 0 Then
                            bs.Filter = bs.Filter + "Degre = 'Erreur'"
                            mCountFiltreAppliquer = mCountFiltreAppliquer + 1
                        Else
     
                            bs.Filter = bs.Filter + " AND " + "Degre = 'Erreur'"
                            mCountFiltreAppliquer = mCountFiltreAppliquer + 1
                        End If
                    End If
                End If
            End Sub
     
            Private Function CountFiltreTotal() As Integer
                Dim i As Integer = 0
     
                If FiltreAuto = True Then
                    i = i + 1
                End If
     
                If FiltreManu = True Then
                    i = i + 1
                End If
     
                If FiltreErreur = True Then
                    i = i + 1
                End If
     
                Return i
            End Function
     
        End Class
    Voila le code dans mon form entre la déclaration de la classe et son utilisation par 3 boutons :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
        Private mFilterDGV As New FilterDGV
        Private Sub btnAuto_Click(sender As System.Object, e As System.EventArgs) Handles btnAuto.Click
            If mFilterDGV.FiltreAuto = False Then
                mFilterDGV.FiltreAuto = True
                mFilterDGV.FiltrerDGV(bs)
            Else
                mFilterDGV.FiltreAuto = False
                mFilterDGV.FiltrerDGV(bs)
            End If
        End Sub
     
        Private Sub btnManu_Click(sender As System.Object, e As System.EventArgs) Handles btnManu.Click
            If mFilterDGV.FiltreManu = False Then
                mFilterDGV.FiltreManu = True
                mFilterDGV.FiltrerDGV(bs)
            Else
                mFilterDGV.FiltreManu = False
                mFilterDGV.FiltrerDGV(bs)
            End If
        End Sub
     
        Private Sub btnErreur_Click(sender As System.Object, e As System.EventArgs) Handles btnErreur.Click
            If mFilterDGV.FiltreErreur = False Then
                mFilterDGV.FiltreErreur = True
                mFilterDGV.FiltrerDGV(bs)
            Else
                mFilterDGV.FiltreErreur = False
                mFilterDGV.FiltrerDGV(bs)
            End If
        End Sub
    Merci beaucoup a Graffito et rv26t pour leurs solutions !!

  12. #12
    Membre habitué
    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
    Points : 148
    Points
    148
    Par défaut
    Bon après m’être rendu compte que ma solution étais vraiment mal écrite dans le sens politiquement correct, j'ai changer un peu les notions de ma classe Filtre que je trouvé pas adapter.

    Maintenant, j'ai une classe filtre qui représente un filtre composé de 3 propriétés (État du filtre, Requête du filtre et Identifiant du filtre) toujours dans mon module:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
        Public Class Filtre
            Private msEtat As Boolean
            Private msRequet As String
            Private msId As Integer
     
            Public Property Etat() As Boolean
                Get
                    Return msEtat
                End Get
     
                Set(ByVal value As Boolean)
                    msEtat = value
                End Set
            End Property
     
            Public Property Requet() As String
                Get
                    Return msRequet
                End Get
     
                Set(ByVal value As String)
                    msRequet = value
                End Set
            End Property
     
            Public Property Id() As Integer
                Get
                    Return msId
                End Get
     
                Set(ByVal value As Integer)
                    msId = value
                End Set
            End Property
        End Class
    Dans mon Form je configure mes filtres au chargement et je les enregistres dans un Dico :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
            Dim Filtre1 As New Filtre
            Filtre1.Requet = "Evenement = '1'"
            Filtre1.Id = 1
            DicoFiltre.Add(Filtre1.Id, Filtre1)
     
            Dim Filtre2 As New Filtre
            Filtre2.Requet = "Degre = 'Manu'"
            Filtre2.Id = 2
            DicoFiltre.Add(Filtre2.Id, Filtre2)
     
            Dim Filtre3 As New Filtre
            Filtre3.Requet = "Degre = 'Erreur'"
            Filtre3.Id = 3
            DicoFiltre.Add(Filtre3.Id, Filtre3)
    Ne pas oulier de créer mon dico dans mon module :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public DicoFiltre As Dictionary(Of Integer, Filtre) = New Dictionary(Of Integer, Filtre)
    Ensuite mes filtres seront gérer par une classe GererFiltre (pour l'instant c'est une classe mais sa pourrais très bien être une simple méthode) :

    Class GererFiltre dans le module :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     Public Class GererFiltre
            Public Sub FiltrerDGV(bs As BindingSource)
                Dim mCountFiltreTotal As Integer = CountFiltreTotal()
                Dim mCountFiltreAppliquer As Integer
                bs.RemoveFilter()
                For Each mFiltre As Filtre In DicoFiltre.Values
                    If mFiltre.Etat = True Then
                        If mCountFiltreTotal = 1 Then
                            bs.Filter = bs.Filter + mFiltre.Requet
                        Else
                            If mCountFiltreAppliquer = 0 Then
                                bs.Filter = bs.Filter + mFiltre.Requet
                                mCountFiltreAppliquer = mCountFiltreAppliquer + 1
                            Else
     
                                bs.Filter = bs.Filter + " AND " + mFiltre.Requet
                                mCountFiltreAppliquer = mCountFiltreAppliquer + 1
                            End If
                        End If
                    End If
                Next
            End Sub
            Private Function CountFiltreTotal() As Integer
                Dim i As Integer = 0
                For Each mFiltre As Filtre In DicoFiltre.Values
                    If mFiltre.Etat = True Then
                        i = i + 1
                    End If
                Next
                Return i
            End Function
     
        End Class
    Et pour finir mes 3 boutons et la déclaration de la classe GererFiltre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    Private mGererFilterDGV As New GererFiltre
    Private Sub btnAuto_Click(sender As System.Object, e As System.EventArgs) Handles btnAuto.Click
            If DicoFiltre.Item(1).Etat = False Then
                DicoFiltre.Item(1).Etat = True
                mGererFilterDGV.FiltrerDGV(bs)
            Else
                DicoFiltre.Item(1).Etat = False
                mGererFilterDGV.FiltrerDGV(bs)
            End If
        End Sub
     
        Private Sub btnManu_Click(sender As System.Object, e As System.EventArgs) Handles btnManu.Click
            If DicoFiltre.Item(2).Etat = False Then
                DicoFiltre.Item(2).Etat = True
                mGererFilterDGV.FiltrerDGV(bs)
            Else
                DicoFiltre.Item(2).Etat = False
                mGererFilterDGV.FiltrerDGV(bs)
            End If
        End Sub
     
        Private Sub btnErreur_Click(sender As System.Object, e As System.EventArgs) Handles btnErreur.Click
            If DicoFiltre.Item(3).Etat = False Then
                DicoFiltre.Item(3).Etat = True
                mGererFilterDGV.FiltrerDGV(bs)
            Else
                DicoFiltre.Item(3).Etat = False
                mGererFilterDGV.FiltrerDGV(bs)
            End If
        End Sub

    Voila, sinon je commence a me rendre compte que ma classe GererFiltre est un peu irrationnelle donc je vais sans doute la remplacer par deux simple méthode utilisé dans le Form (GererFiltre et CountFiltreTotalActiver).

  13. #13
    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
    Points : 5 100
    Points
    5 100
    Par défaut
    Je n'ai pas regardé le code.

    Je verrais bien une solution du style

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        Dim DicoFiltre As Dictionary(Of String, String) = New Dictionary(Of String, String)
     
        Private Sub frmDataGridView_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            DicoFiltre.Add("Auto", "(Degre = 'Auto')")
            DicoFiltre.Add("Manu", "(Degre = 'Manu')")
            DicoFiltre.Add("Erreur", "(Degre = 'Erreur')")
        End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
        Private Sub btnFiltre_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnFiltre.Click
            MessageBox.Show(DonneFiltres())
        End Sub
     
        Function DonneFiltres() As String
            Dim strFiltre As String = Nothing
            For Each chkB As CheckBox In gbDegres.Controls
                If chkB.Checked Then strFiltre = CumulFiltre(chkB, strFiltre, " OR ")
            Next
            Return strFiltre
        End Function
     
        Function CumulFiltre(ByVal c As CheckBox, ByVal sFiltre As String, ByVal condition As String) As String
            If sFiltre Is Nothing Then Return DicoFiltre(c.Text) Else Return sFiltre & condition & DicoFiltre(c.Text)
        End Function
    avec
    des GroupBox, des checkBox et un bouton. (les textes respectif des cases à coché "Auto", "Manu", "Erreur")

    S'il y a beaucoup d'évènements une liste de case à cocher pour les Events dans un autre gorupbox.
    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.

  14. #14
    Membre habitué
    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
    Points : 148
    Points
    148
    Par défaut
    Ui ce dans le meme genre sauf que le tient a l'air beaucoup mieux programmé surtout au niveau de l'utilisation des Nothing, etc...
    En tous cas, je garde ta solution de coté le temps de bien la comprendre !!

+ 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