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 :

Enlever le tri sur une DataGridView


Sujet :

C#

  1. #1
    Membre averti Avatar de Contrec
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38

    Informations forums :
    Inscription : Mars 2005
    Messages : 597
    Points : 342
    Points
    342
    Par défaut Enlever le tri sur une DataGridView
    bonjour, je voulais savoir comment on peut faire pour desactiver en programmation le tri sur une DataGridView.

    L'utilisateur trie les donnees en cliquant sur le header d'une colonne puis lorsqu'il clique sur un bouton, je veux desactiver le tri...

    J'ai cherche mais je ne trouve pas...


    Y a t il une fonction specifique ?


    Merci d'avance
    Contrec

  2. #2
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Points : 8 734
    Points
    8 734
    Par défaut
    C'est une propriété du GridView

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 764
    Points : 909
    Points
    909
    Par défaut
    Pour empêcher le tri sur une colonne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dataGridView1.Columns[0].SortMode = DataGridViewColumnSortMode.NotSortable;

  4. #4
    Membre éprouvé Avatar de guitoux1
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 011
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 011
    Points : 1 256
    Points
    1 256
    Par défaut
    Et pour le GridView (ASP.NET 2.0) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    foreach (DataControlField column in GridView1.Columns)
    {
        column.SortExpression = string.Empty;
    }

  5. #5
    Membre averti Avatar de Contrec
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38

    Informations forums :
    Inscription : Mars 2005
    Messages : 597
    Points : 342
    Points
    342
    Par défaut
    Non mais en fait, je veux juste annuler un tri deja effectue par l'utilisateur.
    Contrec

  6. #6
    Membre éprouvé Avatar de guitoux1
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 011
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 011
    Points : 1 256
    Points
    1 256
    Par défaut
    Avec le GridView (ASP.NET 2.0), tu eux faire ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GridView1.Sort(string.Empty, SortDirection.Ascending);
    dans le code du clic sur le bouton. Seulement attention, l'élément sélectionné ne sera plus le même que celui cliqué !!

  7. #7
    Membre averti Avatar de Contrec
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38

    Informations forums :
    Inscription : Mars 2005
    Messages : 597
    Points : 342
    Points
    342
    Par défaut
    Ce ne marche pas en c# sur une DataGridView...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Error	1	The best overloaded method match for 'System.Windows.Forms.DataGridView.Sort(System.Windows.Forms.DataGridViewColumn, System.ComponentModel.ListSortDirection)' has some invalid arguments
    Contrec

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 764
    Points : 909
    Points
    909
    Par défaut
    Citation Envoyé par Contrec
    Non mais en fait, je veux juste annuler un tri deja effectue par l'utilisateur.
    C'est-à dire ??
    Les données sont affichées dans le DataGridView, l'utilisateur les "trie" selon diverses colonnes, puis tu voudrais revenir à l'affichage initial ?

    La seule solution que je voie : trier d'abord les données selon une colonne paticulière, laisser l'utilisateur bidouiller, puis re-trier les données selon la même colonne.
    Si au départ on ne trie pas les données, elles seront affichées dans le DataGridView selon leur ordre d'apparition lors de la lecture de la DataSource, donc elle peuvent apparaître dans n'importe quel ordre...

  9. #9
    Membre averti Avatar de Contrec
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38

    Informations forums :
    Inscription : Mars 2005
    Messages : 597
    Points : 342
    Points
    342
    Par défaut
    Je t'explique :


    En gros, l'utilisateur cree des lignes de donnees dans la DataGridView. Dans cette derniere, j'ai une colonne appelee SequenceNumber.

    Ce SequenceNumber doit prendre les valeurs de 1 pour la premiere ligne du dataGridView puis 2, 3, 4 (incrementation jusqu'a la fin de la DataGridView.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    VALEUR    |     SequenceNumber
    A         |        1	
    B         |	   2
    C         |	   3
    D         |	   4
    L'utilisateur peut aussi trier la colonne VALUE en decroissant (D, C, B, A) et lorsqu'il clique sur un bouton appele "Refaire la Sequence", les numeros de sequence number doivent repartir de 1 a n mais dans le sens inverse.... En gros ca devrait donner ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    VALEUR    |     SequenceNumber
    D         |        1	
    C         |	   2
    B         |	   3
    A         |	   4
    Le probleme est qu'il peut trier par SequenceNumber decroissant et vouloir refaire un "Refaire la Sequence". Mais la ca fais n'importe koi car il existe un tri sur la colonne que je suis en train de modifier...

    Resultat attendu :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    VALEUR    |     SequenceNumber
    D         |        1	
    C         |	   2
    B         |	   3
    A         |	   4
    Resultat obtenu :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    VALEUR    |     SequenceNumber
    A         |        4	
    C         |	   4
    D         |	   1
    B         |	   3
    Code de la methode Refaire la Sequence :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    int seqno = 1;
    foreach (DataGridViewRow dr in dgvParams.Rows)
    {
        if (dr.IsNewRow) break;
        dr.Cells["SEQNO"].Value = seqno.ToString();
        ParamDS.PARAMRow myRow = paramDS.PARAM.NewPARAMRow();
        myRow = paramDS.PARAM.FindByPARAMID(Convert.ToDecimal(dr.Cells["PARAMID"].Value.ToString()));
        if (myRow == null) break;
        myRow.SEQNO = Convert.ToDecimal(seqno.ToString());
        seqno++;
    }
    Je voulais donc annuler le tri sur la colonne SequenceNumber tout en gardant l'affichage actuel et enfin executer ma methode "Refaire la Sequence".
    Contrec

  10. #10
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 764
    Points : 909
    Points
    909
    Par défaut
    Hum... Expliqué comme ça on comprend mieux ce que tu veux faire qu'avec "je veux desactiver le tri"

    Le problème serait donc que :
    - le tri est activé sur la colonne SEQNO
    - tu parcours les lignes du DataGridView en changeant SEQNO
    - donc comme à chaque modif les éléments sont réordonnés pour respecter le tri au final ça fait n'importe quoi

    Ce n'est pas forcément le plus élégant, mais je pense que tu pourrais tout simplement commencer par récupérer l'ordre des lignes dans ton DataGridView, afin d'éviter de le parcourir lui-même...
    Par exemple : tu crées une List<DataGridViewRow> , tu la remplis avec tes lignes qui seront donc dans l'ordre d'affichage au moment où l'utilisateur clique sur le bouton, puis c'est cette liste que tu parcours, ainsi le changement de position des lignes au fur et à mesure des changements de valeurs de la colonne SEQNO ne t'affecteront pas.
    Tu peux ajouter à la fin de ta fonction un appel à la fonction Sort du DataGridView pour trier les lignes selon SEQNO et dans l'ordre croissant, comme ça au niveau de l'affichage l'utilisateur retrouvera bien ses lignes dans l'ordre qu'il a défini...

    Je ne crois pas que l'idée "je désactive le tri mais les lignes restent dans le même ordre" puisse aboutir.
    Soit les lignes sont dans l'ordre de la DataSource, soit elles sont triées selon une colonne. Du moins c'est comme ça que je le vois...

  11. #11
    Membre averti Avatar de Contrec
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38

    Informations forums :
    Inscription : Mars 2005
    Messages : 597
    Points : 342
    Points
    342
    Par défaut
    J'essaye ca et je vous dis. J'ai juste un peu peur que ca prenne du temps si on a 7000 lignes dans la DataGridView... (Utilisation max)

    Pour une explication detaillee, y a qu'a demander
    Contrec

  12. #12
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 764
    Points : 909
    Points
    909
    Par défaut
    Citation Envoyé par Contrec
    J'ai juste un peu peur que ca prenne du temps si on a 7000 lignes dans la DataGridView...
    Une List<DataGridView> n'est qu'une liste de références, ce n'est pas comme si on clonait tous les objets... Les tris fait par l'utilisateur doivent être bien plus lourds !

  13. #13
    Membre averti Avatar de Contrec
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38

    Informations forums :
    Inscription : Mars 2005
    Messages : 597
    Points : 342
    Points
    342
    Par défaut
    Bon je viens de tester avec ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    int seqno = 1;
    List<DataGridViewRow> DgvRows = new List<DataGridViewRow>();
    foreach (DataGridViewRow dr in dgvParams.Rows)
    {
        if (dr.IsNewRow) break;
        DgvRows.Add(dr);
    }
    IEnumerator EnumRows = DgvRows.GetEnumerator();
    while (EnumRows.MoveNext())
    {
        DataGridViewRow dr = (DataGridViewRow)EnumRows.Current;
        dr.Cells["SEQNO"].Value = seqno.ToString();
        seqno++;
    }
    et voila le resultat :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    VALEUR    |     SequenceNumber
    A         |        4	
    D         |	   1
    C         |	   3
    B         |	   2
    C'est pas encore ca, mais au moins, on a pas de doublons...
    Contrec

  14. #14
    Membre averti Avatar de Contrec
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38

    Informations forums :
    Inscription : Mars 2005
    Messages : 597
    Points : 342
    Points
    342
    Par défaut
    Bonjour, je viens de trouve rune solution a mon probleme :

    Directement changer le DataSet au lieu des valeurs de la DataGridView. Je cherche la ligne du DataSet correspondant a la ligne de la DataGridView et je la modifie. Cela ne tient pas compte du tri en cours, et si je raffraichis la DataGridView, toutes les valeurs modifiee sont triees convenablement.
    Contrec

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

Discussions similaires

  1. Lancer une procedure après un tri sur ne datagridview
    Par Au2laDeNosReves dans le forum VB.NET
    Réponses: 8
    Dernier message: 07/10/2009, 15h31
  2. Réponses: 8
    Dernier message: 20/08/2008, 16h19
  3. Réponses: 16
    Dernier message: 10/11/2005, 22h51
  4. tri sur une partie d'un champ
    Par yoline dans le forum Access
    Réponses: 4
    Dernier message: 19/09/2005, 11h25
  5. [JSP] tri sur une colonne
    Par soony dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 28/07/2005, 15h02

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