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

C# Discussion :

Manipulation d'un DataGridView


Sujet :

C#

  1. #1
    Membre régulier
    Homme Profil pro
    Responsable d'exploitation informatique
    Inscrit en
    Août 2012
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Responsable d'exploitation informatique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Août 2012
    Messages : 81
    Points : 70
    Points
    70
    Par défaut Manipulation d'un DataGridView
    Bonjour, bonsoir


    Comment on fait pour trier les valeurs dans an un datagridview suivant des caractères numériques puisque si l'on le fait avec le propriétés par défaut, ça me sort un truc du genre :
    1
    10
    11
    12
    ....
    2
    20
    21
    22
    ...

    Ensuite comment on fait pour tester la valeur entrée dans une cellule pour savoir que c'est un nombre, si oui valider la modification sinon on revient a la valeur précédente

    Merci

  2. #2
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2010
    Messages
    479
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2010
    Messages : 479
    Points : 762
    Points
    762
    Par défaut
    Salut, je n'ai pas toutes les réponses à tes questions mais quelqu'un passera surement derrière
    Donc pour trier tu passes la variable SortMode de ta colonne à Programmatic.
    Ensuite tu t'abonnes à l'event SortCmpare de ton datagridview.
    Enfin dans la fonction tu compares les valeurs et tu assignes le SortResult qui convient.
    Sachant que
    SortResult = -1 donne valeur 1 > valeur 2
    SortResult = 0 donne valeur 1 = valeur 2
    SortResult = 1 donne valeur 1 < valeur 2
    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
     
    private void dgv_SortCompare(object sender, DataGridViewSortCompareEventArgs e)
            {
                if (e.Column.Index == l'index de ta colonne à comparer)
                {
                    float v1 = Convert.ToSingle(e.CellValue1);
                    float v2 = Convert.ToSingle(e.CellValue2);
     
                    if (v1 > v2) 
                   {
                        e.SortResult = -1;
                    }
                    else if (v1 == v2) 
                   {
                        e.SortResult = 0;
                    }
                    else
                   {
                        e.SortResult = 1;
                    }
                }
            }
    Après pour ton histoire de test de valeur numérique il y a plusieurs méthodes...
    Sur l'event CellValueChanged tu peux essayer de faire un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    float val;
    if(float.TryCast(valeur de la cellule du dgv, out val))
    {
       //ok c'est un chiffre
    }
    else
    {
     //pas ok
    }
    Là vient le moment où je ne sais pas répondre ^^ comment on annule la modfi je ne sais pas.
    En fait je ne sais pas s'il est possible de le gérer automatiquement avec le datagridview ? Un genre de rollback ou commit ? A creuser...
    Sinon version longue et moins propre tu peux faire une colonne invisible dans laquelle tu stockes la valeur validée ; donc si le test de cast dans la fonction CellValueChanged échoue tu remplaces la valeur de ta cellule par l'ancienne valeur sinon tu mets à jour la valeur de la cellule "validée".

    Voila bon courage.

  3. #3
    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
    La solution de lead8209 ne marche malheureusement que pour un DatagridView non "bindé" à un DataSource.


    En cas de binding, il existe une (seule) solution un peu acrobatique :
    • créer une colonne non visible avec les numériques bien triés (par exemple paddés à gauche),
    • gérer l'event généré par un click sur le column header pour trier sur la colonne cachée au lieu de la colonne cliquée.
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  4. #4
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2010
    Messages
    479
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2010
    Messages : 479
    Points : 762
    Points
    762
    Par défaut
    Oui en effet
    Je dis peut-être une bêtise vu que je n’utilise pas ou presque pas le bind (ne me tapez pas) mais est-il possible de recharger le bind du dgv en requétant la base ou autre avec le bon order by pour que ce soit la base qui fasse le sort sur des valeurs numériques et non le dgv qui le fasse sur ce qu'il considère comme tu texte ?

  5. #5
    Membre régulier
    Homme Profil pro
    Responsable d'exploitation informatique
    Inscrit en
    Août 2012
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Responsable d'exploitation informatique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Août 2012
    Messages : 81
    Points : 70
    Points
    70
    Par défaut
    Bonjour, merci de vos reponses

    La solution pour le tri marche nikel, mais pour le test, j'ai vu un truc comme e.Cancel pour reecrire la valeur precedent le changement, sauf que Cancel ne marche pas pour CellValueChanged.
    En fait je voudrais surtout eviter de stoquer la valeur de la cellule survolée par la souris dans une variable.

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

Discussions similaires

  1. manipulation du scroll pour une datagridView
    Par yuriyan dans le forum C#
    Réponses: 2
    Dernier message: 05/09/2011, 17h58
  2. manipulation sur datagridview
    Par ahbari dans le forum VB.NET
    Réponses: 5
    Dernier message: 08/07/2011, 11h40
  3. manipulation donneés datagridview + excel
    Par jalalnet dans le forum ADO.NET
    Réponses: 1
    Dernier message: 17/06/2011, 11h34
  4. manipulation des colonnes de DatagridView
    Par laredo dans le forum Débuter
    Réponses: 1
    Dernier message: 18/09/2008, 00h13
  5. Réponses: 14
    Dernier message: 07/09/2007, 22h45

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