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

Windows Forms Discussion :

Tri dans un DataGridColumn


Sujet :

Windows Forms

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 85
    Par défaut Tri dans un DataGridColumn
    Bonjour,

    J'ai un petit problème avec le tri automatique qui s'effectue lors du clic sur le titre d'une colonne de type DataGridColumn. Je m'explique: ma colonne peut contenir aussi bien du texte que des chiffres, mais lors du tri, les valeurs numériques sont triées comme des strings, c'est-à-dire que pour des valeurs de 1, 2, 10, 19, je vais obtenir un tri de 1, 10, 19, 2... (voir capture d'écran en pièce jointe).

    Mon idée est de redéfinir la méthode de tri afin de gérer différemment les valeurs numériques, comment cela est-il possible?

    Si quelqu'un a une autre idée pour obtenir un résultat similaire, je suis bien sûr preneur!

    Merci d'avance
    Images attachées Images attachées  

  2. #2
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Par défaut
    ta deux solutions :

    soit ta colonne ne contient que des "entiers" et tu la type en int32 soit il te faut redefinir la méthode de tri avec une methode sort qui essaiera de faire un int.TryParse() pour les éléments à trier et qui en fonction du fait que ca soit un int ou un string, pourra prendre une décision

    Cela dit, je ne suis pas fan d'avoir une colonne ou tu mélanges des strings et des int, car au final... cela veut "un peu" dire (c'est juste une hypothèse) que dans une meme colonne tu as des frites et des éléphants

    Enfin, voila une piste


    The Monz, Toulouse

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 85
    Par défaut
    En fait je ne peux pas typer la colonne, car tous les éléments sont des strings, mais certains préfèrent mettre 1, 2, 3 plutôt que point1, point2, point3. J'aimerais néanmoins que le tri soit cohérent même si c'est des chiffres.

    Pour redéfinir la méthode de tri, je veux bien, mais pas trace d'une méthode de type Sort dans le descriptif de la classe DataGridColumn...? Elle s'appelle comment?

    Merci

  4. #4
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Par défaut
    salut

    peut-etre est-ce au niveau de la datasource qu'il faut faire le tri ?

    The Monz, Toulouse

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 85
    Par défaut
    Non, mon DataGridView n'est pas lié à un DataSource, il s'agit d'une interaction avec un programme de CAO 3D, je vais insérer le contenu dans chaque ligne du tableau.

  6. #6
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Par défaut
    beh, meme si tu n'as pas de data source, tu pourrais tres bien te crée une DataTable qui agirait de dataSource

    On peut tres bien avoir une datatable sans pour autant faire de la base de données

    The Monz, Toulouse

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2002
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 83
    Par défaut
    Bonjour,

    pour trier ton datagridview, il faut se servir de l'événement DataGridView.SortCompare

    Ce qui pourrait donner :
    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
     
    private void dataGridView1_SortCompare(object sender, DataGridViewSortCompareEventArgs e)
    {
    // Test de la colonne à trier
                if (e.Column.Index  == 0)
                {
                    bool b1;
                    bool b2;
     
                    int v1;
                    int v2;
     
                    // Test si les valeurs sont des entiers 
     
                    b1 = int.TryParse(e.CellValue1.ToString(), out v1);
                    b2 = int.TryParse(e.CellValue2.ToString(), out  v2);
     
                    if (b1 && b2) // value1 et value2 sont des entiers
                    {
                        e.SortResult = v1 - v2;
                    }
                    else // Tri = tri normal - comparaison de chaine
                    {
                        e.SortResult = string.Compare(e.CellValue1.ToString(), e.CellValue2.ToString());
                    }
                    e.Handled = true;
                }
     
    }

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 85
    Par défaut
    Merci nostradamus, c'est exactement ce que je souhaitais!

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

Discussions similaires

  1. empecher le tri dans un listbox dynamiquement
    Par firejocker dans le forum MFC
    Réponses: 2
    Dernier message: 01/12/2005, 17h32
  2. Tri dans excel ?
    Par Paulkouhan dans le forum C++Builder
    Réponses: 9
    Dernier message: 11/10/2005, 08h27
  3. [TListView] Ajouter un icône de tri dans le header
    Par phplive dans le forum Composants VCL
    Réponses: 1
    Dernier message: 25/09/2005, 13h07
  4. Tri dans une DBGrid sur un champ date au format jj/mm
    Par Jeankiki dans le forum Bases de données
    Réponses: 10
    Dernier message: 31/10/2004, 12h32
  5. [langage] tri dans tableau de hachage
    Par mimilou dans le forum Langage
    Réponses: 2
    Dernier message: 10/03/2004, 16h10

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