Tri DataGridView avec des dates

Résolu
Anonyme209 Messages postés 761 Statut Membre -  
Anonyme209 Messages postés 761 Statut Membre -
Bonjour,

Dans la colonne de ma DataGridView, j'ai diverses dates.
Je voudrais que ma DataGridView trie mes données en fonction des dates par ordre chronologique et inversement.

Avec DataGridView.Sort, les dates sont triées comme du texte normal, et ça donne ça:

01/01/2001 00:00
20/10/2015 00:00
30/05/2014 00:00


Merci de votre aide.

2 réponses

  1. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    Tu peux te servir d'un comparateur comme pour une listView.

    Voici le code:

    Private Sub DataGridView1_SortCompare(sender As Object, e As DataGridViewSortCompareEventArgs) Handles DataGridView1.SortCompare
            'Récupérer le composant
            Dim grid As DataGridView = DirectCast(sender, DataGridView)
            'Définir le nom des colonnes (à changer en fonction de tes propres paramètres)
            Dim colonneDate As String = "Date" 'a adapter
            'Traitement en fonction de la colonne où se situe la cellule en cours d'édition 
            Select Case e.Column.Name
                Case colonneDate
                    e.SortResult = System.DateTime.Compare(CDate((e.CellValue1)), CDate((e.CellValue2)))
                    e.Handled = True
            End Select
        End Sub
        'on peut mettre ce code dans un bouton
        Private Sub DataGridView1_ColumnHeaderMouseDoubleClick(sender As Object, e As System.Windows.Forms.DataGridViewCellMouseEventArgs) Handles DataGridView1.ColumnHeaderMouseDoubleClick
            With DataGridView1
                .Sort(.Columns("Date"), System.ComponentModel.ListSortDirection.Descending)
            End With
        End Sub
        'on peut mettre ce code dans un bouton
        Private Sub DataGridView1_ColumnHeaderMouseClick(sender As Object, e As System.Windows.Forms.DataGridViewCellMouseEventArgs) Handles DataGridView1.ColumnHeaderMouseClick
            With DataGridView1
                DataGridView1.Sort(.Columns("Date"), System.ComponentModel.ListSortDirection.Ascending)
            End With
        End Sub

    0
    1. Anonyme209 Messages postés 761 Statut Membre 19
       
      Bonjour,

      Le code fonctionne mais altère le fonctionnement de mon programme.
      Y-aurait-il un composant (même non directement intégré) qui trie automatiquement dans l'ordre chronologique?
      Je n'aurais qu'à mettre mes lignes dans ce composant et à les remettre dans mon datagridview dans le bon ordre.
      0
      1. cs_Le Pivert Messages postés 8437 Statut Contributeur 730 > Anonyme209 Messages postés 761 Statut Membre
         
        Dans l'exemple que je t'ai montré, il n'y a qu'une colonne, il faut mettre toutes les colonne et voir si cela n'altère pas ton programme:

        'Définir le nom des colonnes (à changer en fonction de tes propres paramètres)
                Dim colonneDate As Date = "Date" 'a adapter
               Dim colonneNom As String= "Nom" 'a adapter
        'etc.
                'Traitement en fonction de la colonne où se situe la cellule en cours d'édition 
                Select Case e.Column.Name
                    Case colonneDate
                        e.SortResult = System.DateTime.Compare(CDate((e.CellValue1)), CDate((e.CellValue2)))
                        e.Handled = True
                     Case colonneNom
                        e.SortResult = System.DateTime.Compare(String((e.CellValue1)), String((e.CellValue2)))
                        e.Handled = True
        .        End Select
        'etc.
        


        Corrige:
        Dim colonneDate As Date = "Date" 'a adapter
        au lieu de
        Dim colonneDate As String = "Date" 'a adapter



        Sinon dernière option, mettre les dates à l'américaine comme pour les photos:
        2015/02/15
        0
    2. Anonyme209 Messages postés 761 Statut Membre 19
       
      J'ai réussi à trouver et à résoudre le problème de compatibilité avec ton premier code, et il fonctionne maintenant parfaitement.
      Merci beaucoup de ton aide.
      0