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 :

Trier une colonne d'un Datagridview


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Homme Profil pro
    developpeur
    Inscrit en
    Décembre 2011
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : developpeur
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2011
    Messages : 141
    Par défaut Trier une colonne d'un Datagridview
    Bonjour,

    Je souhaiterai pouvoir trier par ordre croissant ou décroissant ma "Columns(0)" soit à l'aide de 2 button soit par l'entête de la colonne si cela en est possible ?

    Ma "Columns(0)" comporte 10 lignes numérotées de 1 à 10

    Je m'apercois dans Columns -> Séléction de la colonne -> ShortMode= Automatic
    (Pour les colonnes ou je ne souhaites pas que l'utilisateur les tries je les passeraient en "NotSortable)

    J'ai trouvé ceci comme exemple : http://msdn.microsoft.com/fr-fr/libr.../0868ft3z.aspx

    mais je n'arrive pas à l'assigner sur ma colonne en question
    Avez-vous une idée ?

    Merci

  2. #2
    Membre émérite
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2012
    Messages
    337
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Décembre 2012
    Messages : 337
    Par défaut
    Salut,

    Au risque de ne pas avoir compris ce que tu voulais faire,

    quand tu met la propriété .SortMode sur Automatic, lorsque tu clique sur l'entête de la colonne ça te trie les données

    quand tu met la propriété .SortMode sur Programmatic, c'est toi qui doit gérer le tri de la colonne avec des bouttons par exemple mais le tout par code.

    Et pour finir, en mettant NotSortable, les colonnes ne se trieront jamais.

    J'avais mal lu ton post. Si tu veux vraiment te servir de bouttons pour trier tes colonnes, met la propriété .SortMode de tes colonnes sur Programmatic puis
    utilise la méthode .Sort() de ton DataGridView en lui passant la colonne que tu veux trier et le sens comme paramètres

    ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Private Sub btnTriCroissant_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnTriCroissant.Click
            MonDatagridView.Sort(MonDatagridView.Columns(0),System.ComponentModel.ListSortDirection.Ascending)
        End Sub
    Sauf que le contenu des cellules triées est considéré comme du texte et que si tu as 1, 15, 9,20 avant de trier dan stes cellules il va te les trier de la sorte : 1,15,20,9...

    Il faudra que tu passe par la personnalisation du tri.

    http://msdn.microsoft.com/fr-fr/libr.../ms171608.aspx

    A moins que quelqu'un ai une autre solution.
    Bonne journée et bonne fin d'année.

  3. #3
    Membre très actif
    Homme Profil pro
    developpeur
    Inscrit en
    Décembre 2011
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : developpeur
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2011
    Messages : 141
    Par défaut
    Merci pour ta réponse

    Je vais essayer de passer par des buttons donc ma colonne est en ShortMode = Programmatic

    Voici le code pour mes boutons :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
            DataGridView1.Sort(DataGridView1.Columns(0), System.ComponentModel.ListSortDirection.Ascending)
        End Sub
     
        Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
            DataGridView1.Sort(DataGridView1.Columns(0), System.ComponentModel.ListSortDirection.Descending)
        End Sub
    Et effectivement il trie d'abord la 1er chiffre

    Exemple :
    1
    2
    3
    4
    10
    15
    25
    30

    donne en ordre croissant :

    1
    10
    15
    2
    25
    3
    30
    4 etc.....

    Je vais essayer de cogiter sur ton lien pour la personnalisation du tri pour obtenir le bon ordre
    Si une personne a une autre solution je suis tout à fait preneur
    Merci

  4. #4
    Membre émérite
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2012
    Messages
    337
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Décembre 2012
    Messages : 337
    Par défaut
    Salut,

    Perso si je devais le faire (ce qui devrais pas tarder à arriver) je pense que j'utiliser l'abonnement à l'évènement SortCompare et j'essayerais de caster le contenu de la cellule en Integer puis je les compare.

    Je n'ai pas écrit de code pour le faire mais ça me semble être le plus simple.

  5. #5
    Membre très actif
    Homme Profil pro
    developpeur
    Inscrit en
    Décembre 2011
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : developpeur
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2011
    Messages : 141
    Par défaut
    Je vais essayer de déchiffrer ce que tu m'a dis

  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 104
    Par défaut
    Bon à la louche j'ai fait ça rapidos :
    1) On customise l'évènement _SortCompare. Désormais le tri se fait en fonction des valeurs décimales du contenu des cellules.
    On peut vérifier que l'ordre numérique est bien respecté en cliquant sur le libellé des colonnes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
        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 colonneQuantite As String = "ColonneQuantite"
            Dim colonnePrixUnit As String = "ColonnePrixUnit"
            Dim colonneTotal As String = "ColonneTotal"
            'Traitement en fonction de la colonne où se situe la cellule en cours d'édition 
            Select Case e.Column.Name
                Case colonnePrixUnit, colonneQuantite, colonneTotal
                    e.SortResult = System.Decimal.Compare(e.CellValue1, e.CellValue2)
                    e.Handled = True
            End Select
        End Sub
    2) On affecte à un ou plusieurs boutons le rôle de lancer l'évènement (pas sûr que ces boutons soient très utiles mais bon...).
    A titre d'exemple, j'ai réalisé un bouton qui lance un tri croissant dans la colonne portant le nom "ColonnePrixUnit".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            With DataGridView1
                DataGridView1.Sort(.Columns("ColonnePrixUnit"), System.ComponentModel.ListSortDirection.Ascending)
            End With
        End Sub

  7. #7
    Membre émérite
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2012
    Messages
    337
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Décembre 2012
    Messages : 337
    Par défaut
    Salut,

    Après avoir testé longuement de sortir quelque chose, j'ai finis par trouver la solution toute simple donnée par emmr.rida sur ce site

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Private Sub TriNumérique(sender As Object, e As DataGridViewSortCompareEventArgs) Handles DataGridView1.SortCompare
            If e.Column.Index = 0 Then
                If Integer.Parse(e.CellValue1.ToString) > Integer.Parse(e.CellValue2.ToString) Then
                    e.SortResult = -1
                Else
                    e.SortResult = 1
                End If
                e.Handled = True
            End If
    End Sub
    En même temps la solution de mdevaux62 est encore mieux car elle te permet de faire le même tri sur plusieurs colones

    Ps: Evites les boutons ça sature l'interface XD

    Merci à lui pour cette aide

Discussions similaires

  1. Trier une colonne de type date dans un datagridview
    Par eviolleau dans le forum VB.NET
    Réponses: 12
    Dernier message: 26/03/2010, 16h56
  2. Trier une colonne
    Par tets88 dans le forum Access
    Réponses: 1
    Dernier message: 02/05/2006, 08h59
  3. [VB.NET] Calculs dans une colonne d'un datagridview
    Par boulete dans le forum Windows Forms
    Réponses: 3
    Dernier message: 31/03/2006, 15h11
  4. Trier une colonne avec des valeurs numériques ou textes
    Par jfc dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 07/02/2006, 11h15
  5. Réponses: 5
    Dernier message: 15/11/2005, 12h57

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