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 :

Filtre sur un DGV dynamique


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 Filtre sur un DGV dynamique
    Bonjour,

    Je souhaite avoir vos suggestions pour pouvoir réaliser un filtre sur ma DGV qui est dynamique, j'aurai aimé savoir s'il existé pas une méthode avec DGV pour filtré directement comme avec le tri ?

    J'ai vu des solutions avec un soit disons datablinde bidule truc mais moi j'utilise pas de BDD. J'ai une alarme qui s'active, mon simulateur demande au gestionnaire d'affiché cette alarme via une requête, avant d'imprimé l'alarme, il va la stocker dans une collection et regarder s'il y a pas un filtre en rapport avec l'alarme, ensuite il l'affiche à l'écran.

    Merci d'avance pour vos solutions !!

  2. #2
    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
    Bonjour,

    Un exemple de test que j'avais fait. (exemple tiré de msdn et d'un besoin d'un forum-eur)

    Une form "frmDataGridView"
    Un datagridview "DataGridView1"
    Un bouton btnAuto n'affichera que les lignes de degrés AUTO
    Un bouton btnManu n'affichera que les lignes de degrés MANU
    Un bouton btnError n'affichera que les lignes de degrés ERROR

    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
    104
    105
    106
    107
    108
    109
    Public Class frmDataGridView
     
        Private Sub frmDataGridView_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            TableForDgv()
            'PlusDeTri()
        End Sub
     
        Dim dtFromGrid As New DataTable()
        Dim bs As New BindingSource
     
        Private Sub TableForDgv()
            Dim ColDate As DataColumn = New DataColumn()
            ColDate.ColumnName = "Date"
            dtFromGrid.Columns.Add(ColDate)
            Dim ColHeure As DataColumn = New DataColumn()
            ColHeure.ColumnName = "Heure"
            dtFromGrid.Columns.Add(ColHeure)
            Dim ColDegre As DataColumn = New DataColumn()
            ColDegre.ColumnName = "Degre"
            dtFromGrid.Columns.Add(ColDegre)
            Dim ColEven As DataColumn = New DataColumn()
            ColEven.ColumnName = "Evenement"
            dtFromGrid.Columns.Add(ColEven)
     
    ' équivalent fichier    Dim texte As String = "28/02/2013=!=23:52:11=!=MANU=!=Ouverture de l application" & vbCrLf & "28/02/2013=!=23:52:28=!=ERROR=!=Initialise la carte de comptage" & vbCrLf & "28/02/2013=!=23:52:28=!=AUTO=!=Initialise la carte ProfilBUS" & vbCrLf & "28/02/2013=!=23:52:31=!=MANU=!=Ouverture de la fenetre gestion  "
            Dim lineseparation As String = Environment.NewLine
            Dim columnseparation() As String = {"=!="}
            Dim Elements As String() = Split(System.IO.File.ReadAllText("D:\data\log.txt"), lineseparation)
     
            For Each col As DataGridViewColumn In DataGridView1.Columns
                dtFromGrid.Columns.Add(col.Name)
            Next
     
            For i As Integer = 0 To Elements.Length - 1
                dtFromGrid.Rows.Add(Elements(i).Split(columnseparation, StringSplitOptions.None))
            Next
     
            bs.DataSource = dtFromGrid
     
            With DataGridView1
                .DataSource = bs
                .Columns("degre").HeaderText = "degré"
                .Columns("evenement").HeaderText = "évènement"
                .AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.DisplayedCells
            End With
     
        End Sub
     
        Private Sub DataGridView1_CellFormatting(ByVal sender As Object, ByVal e As DataGridViewCellFormattingEventArgs) Handles DataGridView1.CellFormatting
     
            'Récupération de la ligne correspondante dans la source de données.
            Dim row As DataRowView = CType(DataGridView1.Rows(e.RowIndex).DataBoundItem, DataRowView)
     
            If Not row Is Nothing Then
                If Not row("Degre") Is DBNull.Value Then
                    Dim degr As String = CStr(row("Degre"))
                    Dim cBackColor As Color = Color.White
                    Dim cForColor As Color = Color.Black
                    Dim font As New Font(DataGridView1.DefaultCellStyle.Font.FontFamily, 10)
     
                    Select Case degr
                        Case "AUTO"
                            cBackColor = Color.Green
                            cForColor = Color.White
                        Case "MANU"
                            cBackColor = Color.Yellow
                            cForColor = Color.DarkBlue
                        Case "ERROR"
                            cBackColor = Color.Red
                            cForColor = Color.White
                    End Select
     
                    Me.DataGridView1.Rows(e.RowIndex).DefaultCellStyle.BackColor = cBackColor
                    Me.DataGridView1.Rows(e.RowIndex).DefaultCellStyle.ForeColor = cForColor
                    Me.DataGridView1.Rows(e.RowIndex).DefaultCellStyle.Font = font
                End If
            End If
     
        End Sub
     
        Private Sub btnAuto_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAuto.Click
            bs.Filter = "Degre = 'AUTO'"
        End Sub
     
        Private Sub btnManu_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnManu.Click
            bs.Filter = "Degre = 'MANU'"
        End Sub
     
        Private Sub btnError_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnError.Click
            bs.Filter = "Degre = 'ERROR'"
        End Sub
     
        Private Sub DataGridView1_ColumnHeaderMouseClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellMouseEventArgs) Handles DataGridView1.ColumnHeaderMouseClick
            If e.Button = MouseButtons.Right Then DataGridView1.Columns(e.ColumnIndex).HeaderText = InputBox("Nom de la colonne", "Titre colonne")
        End Sub
     
        Private Sub PlusDeTri()
            For Each _col As DataGridViewColumn In DataGridView1.Columns
                _col.SortMode = DataGridViewColumnSortMode.NotSortable
            Next
        End Sub
     
        Private Sub DataGridView1_CellValidating(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellValidatingEventArgs) Handles DataGridView1.CellValidating
            'Si la valeur de la cellule n'est pas validée, donnez à la propriété Cancel la valeur true. De cette manière, le contrôle DataGridView empêche le curseur de quitter la cellule. 
            ' donc si le compte existe (égalité vrai, à true) valide la cellule (par le not)
            If e.ColumnIndex = 2 Then e.Cancel = Not (e.FormattedValue.ToString = "Compte reconnu et existant")
        End Sub
     
    End Class
    Désolé pour le manque de commentaire, j'avais tout fait à la volée comme ça.
    A adapter, bien sur. Par ta collection à la place du fichier (voire directement ta collection en lien datasource sur le "BindingSource" à la place du dataTable, à tester - c'est un peu tard (enfin tôt) pour que je teste. )

    Il y a pas mal de ligne, mais c'est le remplissage, la mise en forme.
    Le filtre se fait par (situé a partir de la ligne 81 dans le code ci-dessus)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub btnAuto_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAuto.Click
            bs.Filter = "Degre = 'AUTO'"
        End Sub
    Il y a peut-être d'autres solutions plus élégantes.

    [Edit]
    Pour info les données du fichier log
    28/02/2013=!=23:52:11=!=MANU=!=Ouverture de l application
    28/02/2013=!=23:52:28=!=AUTO=!=Initialise la carte de comptage
    28/02/2013=!=23:52:28=!=AUTO=!=Initialise la carte ProfilBUS
    28/02/2013=!=23:52:31=!=ERROR=!=Ouverture de la fenetre gestion
    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.

  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
    Merci beaucoup, je regarde cela ce matin et je te tiens au jus !!

  4. #4
    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 si j'ai bien compris, je dois pour commencer, remplacer ma collection par la DataTable, ensuite, réaliser quasi le même programme qui sur le clic d'un bouton, va filtrer le BindingSource mais je comprends pas le lien entre le BindingSource et mon DGV, enfaite j'ai aucune notion de ce truc, c'est un domaine inconnu, je vais essayé de voir a quoi sa sert. En plus, je dois avoir des filtres cumulable donc je crois qu'il faut que le DataSource de mon DGV ou de mon BindingSource dois être dynamique, c'est-à-dire, que que tous ce qui à était filtré dois être éliminé temporairement du DataSource.

    En tous cas, a voir, je vais essayé de faire des testes !!

  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
    Bonjour,

    J'ai réussi a faire un teste avec un Dico, j'arrive a afficher le contenu du Dico directemement dans mon DGV grace a un BlindingSource mais j'arrive pas par la suite a faire le filtre, en tous cas, l'action sur le bouton ne fait rien.

    Voila le code de ma Form :
    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
    Public Class frmDGV
     
        Private Sub frmDGV_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
            RemplirDico()
            TableForDgv()
        End Sub
     
        Dim bs As New BindingSource
     
        Private Sub RemplirDico()
            Dim Alarme1 As New Alarme
            Alarme1.TimeDate = Now.Day
            Alarme1.TimeDate = Now.Hour
            Alarme1.Degre = "Auto"
            Alarme1.Evenement = "1"
            DicoTest.Add(Alarme1.Evenement, Alarme1)
     
            Dim Alarme2 As New Alarme
            Alarme2.TimeDate = Now.Day
            Alarme2.TimeDate = Now.Hour
            Alarme2.Degre = "Auto"
            Alarme2.Evenement = "2"
            DicoTest.Add(Alarme2.Evenement, Alarme2)
     
            Dim Alarme3 As New Alarme
            Alarme3.TimeDate = Now.Day
            Alarme3.TimeDate = Now.Hour
            Alarme3.Degre = "Manu"
            Alarme3.Evenement = "3"
            DicoTest.Add(Alarme3.Evenement, Alarme3)
     
            Dim Alarme4 As New Alarme
            Alarme4.TimeDate = Now.Day
            Alarme4.TimeDate = Now.Hour
            Alarme4.Degre = "Manu"
            Alarme4.Evenement = "4"
            DicoTest.Add(Alarme4.Evenement, Alarme4)
     
            Dim Alarme5 As New Alarme
            Alarme5.TimeDate = Now.Day
            Alarme5.TimeDate = Now.Hour
            Alarme5.Degre = "Erreur"
            Alarme5.Evenement = "5"
            DicoTest.Add(Alarme5.Evenement, Alarme5)
        End Sub
     
        Private Sub TableForDgv()
     
            bs.DataSource = DicoTest.Values
     
            With DataGridView1
                .DataSource = bs
                .AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.DisplayedCells
            End With
     
        End Sub
     
    Private Sub btnAuto_Click(sender As System.Object, e As System.EventArgs) Handles btnAuto.Click
            bs.Filter = "Degre = 'Auto'"
        End Sub
    End Class
    Voila le code de mon module qui contient ma classe Alarme :

    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
    Module Module1
        Public DicoTest As Dictionary(Of Integer, Alarme) = New Dictionary(Of Integer, Alarme)
     
        Public Class Alarme
            Private msTimeDate As Integer
            Private msTimeHeure As Integer
            Private msDegre As String
            Private msEvenement As String
     
            Public Property TimeDate() As Integer
                Get
                    Return msTimeDate
                End Get
     
                Set(ByVal value As Integer)
                    msTimeDate = value
                End Set
            End Property
     
            Public Property TimeHeure() As Integer
                Get
                    Return msTimeHeure
                End Get
     
                Set(ByVal value As Integer)
                    msTimeHeure = value
                End Set
            End Property
     
            Public Property Degre() As String
                Get
                    Return msDegre
                End Get
     
                Set(ByVal value As String)
                    msDegre = value
                End Set
            End Property
     
            Public Property Evenement() As String
                Get
                    Return msEvenement
                End Get
     
                Set(ByVal value As String)
                    msEvenement = value
                End Set
            End Property
        End Class
    End Module

    Et voila une image du résultat :

    Nom : TesteFiltre.png
Affichages : 85
Taille : 18,5 Ko

    Merci d'avance pour vos solutions !!

    PS: Je vois pas a quoi sert les événements "CellFormatting" et "CellValidating" dans sens où ils ont un rapport avec le filtre ou pas ???

  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
    Pour répondre à tes questions.

    Citation Envoyé par dragondumond Voir le message
    ...
    PS: Je vois pas a quoi sert les événements "CellFormatting" et "CellValidating" dans sens où ils ont un rapport avec le filtre ou pas ???
    Il n'ont pas de rapport avec le filtre
    Il était un peu tard j'ai mis les test que j'avais fait en vrac (désolé je n'avais pas rop le temps de faire le tri à 2h du mat.)
    CellValidating : sert à contrôler que la saisie est correcte (contrôle) (MSDN:Se produit lorsqu'une cellule perd le focus d'entrée, activant la validation de contenu.)
    CellFormatting : sert à mettre en forme (MSDN:Se produit lorsque le contenu d'une cellule a besoin d'être mis en forme pour l'affichage. )
    Les noms sont parlant.


    Citation Envoyé par dragondumond Voir le message
    Alors si j'ai bien compris, je dois pour commencer, remplacer ma collection par la DataTable, ...
    Effectivement, il faut remplir un DataTable avec la collection.
    On peut utiliser une collection classique avec le DataSource d'un DtaGridView mais il n'y a pas de notion de colonne donc pas de possibilité directe de filtre.
    Sinon il faut créer une collection (List) qui hérite de IBindingListView mais cela est plutôt compliqué car il faut redéfinir les méthodes. (je ne sais pas si cela est possible avec un dictionnaire)

    Il existe Établir une liste déroulante Filtre pour un DataGridView mais je ne sais pas ce que cela peut donner, ni si ça répond à ton besoin.
    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
    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
    Citation Envoyé par dragondumond Voir le message
    ...
    il va la stocker dans une collection et regarder s'il y a pas un filtre en rapport avec l'alarme, ensuite il l'affiche à l'écran.
    ...
    Tu fais donc déjà le filtrage.
    Tu effaces le contenu de ton DataGridView et tu reparcours le Dictionnaire pour remplir le DataGridView en applicant le nouveau filtre.
    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.

  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
    Tu fais donc déjà le filtrage.
    Enfaite, c'étais mon idée de base si j'arrive pas a faire le filtrage, je précise tous de meme, mon gestionnaire d'alarme est indépendant de mon simulateur, si mon simulateur ordonne a mon gestionnaire qu'il y a activation d'une alarme, je suis dans l'obligation de l'afficher en fonction de certain critère qui sont le Tri et le Filtrage. Donc l'idée est de stocker mes alarmes avant de décider s'il faut les afficher ou pas d'où l'idée d'effacer le contenu de mon DGV après un event du type nouvelle alarme déclenché qui vérifie s'il y a un changement ou pas dans la composition du DGV ou pas en fonction de la nouvelle alarme qui décidera par la suite s'il faut rafraichir l'affichage ou pas !!

    Sinon je viens de comprendre aussi (je t'en remercie) qui utiliser directement une collection dans un BlindingSource et un DGV marche bien (J'ai mes colonnes) mais impossible a filtré sauf si j'utilise ma collection sur une DataTable qui ensuite sera encré dans le DataSource blablabla mais je sais pas s'il faudra qui je créer les colonnes de ma DataTable ou sa ce fait automatiquement.

    En tous, je te remercie beaucoup, je vais réaliser mes testes et je met la solution si j'en trouve une !!

  9. #9
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    665
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 665
    Points : 1 161
    Points
    1 161
    Par défaut
    Bonjour,
    pour bénéficier des filtres BindingSources, il est plus simple de transférer les valeurs du dictionnaire dans une Datatable, comme l'a dit rv26t, genre :
    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
        Private Sub TableForDgv()
     
            Dim dt As New DataTable
            dt.Columns.Add("TimeDate", GetType(Integer))
            dt.Columns.Add("TimeHeure", GetType(Integer))
            dt.Columns.Add("Degre")
            dt.Columns.Add("Evenement")
     
            For Each alar As Alarme In DicoTest.Values
                dt.Rows.Add(alar.TimeDate, alar.TimeHeure, alar.Degre, alar.Evenement)
            Next
     
            bs.DataSource = dt ' DicoTest.Values
     
            With DataGridView1
                .DataSource = bs
                .AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.DisplayedCells
            End With
     
        End Sub

  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
    Merci beaucoup, sa marche bien, le filtre marche nickel !!

    je prend le temps de poster la solution :

    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
    Public Class frmDGV
        Private ContextMenuStrip1 As ContextMenuStrip
        Private ContextMenuStrip2 As ContextMenuStrip
     
        Private Sub frmDGV_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
            RemplirDico()
            TableForDgv()
        End Sub
        Public dtFromGrid As New DataTable()
        Public bs As New BindingSource
     
        Private Sub RemplirDico()
            Dim Alarme1 As New Alarme
            Alarme1.TimeDate = Now.DayOfYear
            Alarme1.TimeDate = Now.Hour
            Alarme1.Degre = "Auto"
            Alarme1.Evenement = "1"
            DicoTest.Add(Alarme1.Evenement, Alarme1)
     
            Dim Alarme2 As New Alarme
            Alarme2.TimeDate = Now.DayOfYear
            Alarme2.TimeDate = Now.Hour
            Alarme2.Degre = "Auto"
            Alarme2.Evenement = "2"
            DicoTest.Add(Alarme2.Evenement, Alarme2)
     
            Dim Alarme3 As New Alarme
            Alarme3.TimeDate = Now.DayOfYear
            Alarme3.TimeDate = Now.Hour
            Alarme3.Degre = "Manu"
            Alarme3.Evenement = "3"
            DicoTest.Add(Alarme3.Evenement, Alarme3)
     
            Dim Alarme4 As New Alarme
            Alarme4.TimeDate = Now.DayOfYear
            Alarme4.TimeDate = Now.Hour
            Alarme4.Degre = "Manu"
            Alarme4.Evenement = "4"
            DicoTest.Add(Alarme4.Evenement, Alarme4)
     
            Dim Alarme5 As New Alarme
            Alarme5.TimeDate = Now.DayOfYear
            Alarme5.TimeDate = Now.Hour
            Alarme5.Degre = "Erreur"
            Alarme5.Evenement = "5"
            DicoTest.Add(Alarme5.Evenement, Alarme5)
        End Sub
     
        Private Sub TableForDgv()
     
            Dim ColDate As DataColumn = New DataColumn()
            ColDate.ColumnName = "Date"
            dtFromGrid.Columns.Add(ColDate)
            Dim ColHeure As DataColumn = New DataColumn()
            ColHeure.ColumnName = "Heure"
            dtFromGrid.Columns.Add(ColHeure)
            Dim ColDegre As DataColumn = New DataColumn()
            ColDegre.ColumnName = "Degre"
            dtFromGrid.Columns.Add(ColDegre)
            Dim ColEven As DataColumn = New DataColumn()
            ColEven.ColumnName = "Evenement"
            dtFromGrid.Columns.Add(ColEven)
     
            ' Permet d'ajouter les colonnes du DataTable dans les colonnes du DGV
            For Each col As DataGridViewColumn In DataGridView1.Columns
                dtFromGrid.Columns.Add(col.Name)
            Next
     
            For Each alar As Alarme In DicoTest.Values
                dtFromGrid.Rows.Add(alar.TimeDate, alar.TimeHeure, alar.Degre, alar.Evenement)
            Next
     
            'For i As Integer = 0 To DicoTest.Count - 1
            'dtFromGrid.Rows.Add(DicoTest.Item(i + 1).TimeDate, DicoTest.Item(i + 1).TimeHeure, DicoTest.Item(i + 1).Degre, DicoTest.Item(i + 1).Evenement)
            'Next
            bs.DataSource = dtFromGrid
            'bs.Filter = "Degre = 'Auto'"
     
            With DataGridView1
                .RowHeadersVisible = False
                .DataSource = bs
                .Columns(0).SortMode = DataGridViewColumnSortMode.NotSortable
                .Columns(1).SortMode = DataGridViewColumnSortMode.NotSortable
                .Columns(2).SortMode = DataGridViewColumnSortMode.NotSortable
                .Columns(3).SortMode = DataGridViewColumnSortMode.NotSortable
                .SelectionMode = DataGridViewSelectionMode.FullRowSelect
                .AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.DisplayedCells
            End With
     
        End Sub
     
        Private Sub btnAuto_Click(sender As System.Object, e As System.EventArgs) Handles btnAuto.Click
            bs.Filter = "Evenement = '1'"
            With DataGridView1
                .DataSource = bs
            End With
        End Sub
    End Class

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

Discussions similaires

  1. [XL-2007] Filtre sur graphe de tableau croisé dynamique
    Par kluh dans le forum Excel
    Réponses: 1
    Dernier message: 25/11/2009, 08h28
  2. [XL-2007] Filtre sur tableau croisé dynamique
    Par Flower123 dans le forum Excel
    Réponses: 2
    Dernier message: 18/06/2009, 16h14
  3. filtre sur liste déroulante dynamique
    Par Sami Xite dans le forum Access
    Réponses: 2
    Dernier message: 06/05/2008, 06h37
  4. [flash 8] filtre sur texte dynamique
    Par bibile dans le forum Flash
    Réponses: 7
    Dernier message: 10/05/2007, 10h02
  5. Réponses: 6
    Dernier message: 01/06/2006, 15h11

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