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 numérique plutot que alpha dans un datagridview


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Juin 2007
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 29
    Par défaut Tri numérique plutot que alpha dans un datagridview
    Bonjour,

    Je cherche (en csharp) depuis des plombes à obtenir un tri numérique sur ma colonne identifiant dans un DataGridView alors que ce type de contrôle contient en fait des textbox et fait donc un tri alphanumérique.

    De ce fait 10 se retrouve près de 1 au lieu d être dérriere le 9.
    Pour précision mon DataGridView est peuplé par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    XmlDataDocument xmlDatadoc = new XmlDataDocument();
     xmlDatadoc.DataSet.ReadXml(FILE_NAME );
    Mes pistes de recherche:
    - Dois je faire mon tri dans le dataset et comment?
    (mais je doute que le datagridView affichera constamment selon ce tri )
    - J'ai tenté , après avoir enlevé mon tri sur le datagrid:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    //dataGridView1.Sort(dataGridView1.Columns["ColNorder"],ListSortDirection.Ascending);
    de triturer l'ordre de mes ligne dans le datagrid mais cela m'est impossible car il est bindé .
    - J'ai pensé à agir sur l'ordre de mes lignes dans le dataset mais je ne trouve pas comment par exemple obtenir le numéro de ligne ou index ... pour le décaler

    J'espère être suffisamment clair

    Merci.

  2. #2
    Expert confirmé 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
    Par défaut
    2 solutions après le read du XML:
    • "Quick and dirty" : padder à gauche avec des zéros toutes les valeurs de la colonne d'entier,
    • Plus propre : remplacer la colonne de type String du DataTable qui contient les nombres par une colonne de type entier (remplacement "logique" par l'ajout d'une nouvelle colonne, le transfert des données de l'ancienne à la nouvelle colonne et la suppression de l'ancienne colonne).

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Juin 2007
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 29
    Par défaut
    Citation Envoyé par Graffito Voir le message
    2 solutions après le read du XML:
    • "Quick and dirty" : padder à gauche avec des zéros toutes les valeurs de la colonne d'entier,
    • Plus propre : remplacer la colonne de type String du DataTable qui contient les nombres par une colonne de type entier (remplacement "logique" par l'ajout d'une nouvelle colonne, le transfert des données de l'ancienne à la nouvelle colonne et la suppression de l'ancienne colonne).
    merci Grffito,
    La dirty solution est trop dirty je pense, ca m'obligerai a dégrader l'auto-incrément que j'ai mis en place par ailleurs.
    Pour la 2eme solution ne je vois pas comment faire une colonne int dans mon dataset car il est peuplé par du xml contenants les valeurs dans des attributs (donc entre guillemets " ). Quoique je vais essayer de créer ma colonne en la typant int au lieu qu'elle soit autocréée.

  4. #4
    Expert confirmé 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
    Par défaut
    Au lieu de supprimer l'ancienne colonne, on peut simplement la rendre non visible dans le datagridView.

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Juin 2007
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 29
    Par défaut
    Youppi j'ai pu le faire ! J'ai supprimé les tris et je modifie l'ordre de mes lignes en touchant au dataset. Car enfin j'ai trouvé comment on peut y toucher.

    Pour les interessés:
    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
     private DataRow MoveDataTableRow(DataGridView dgv, string colTabl, string valFind, int posAfter)
            {
                // Retourne la ligne du DataSet/table[0] dont la colone colTable vaut valFind
                // si posAfter>0 et non hors table, la ligne est replacée en posAfter
                DataRow  lmem = null; int lin=0;
                DataSet dsTemp = (DataSet)dgv.DataSource; // Retrouve le dataset lié au DGV
                foreach (DataRow l in dsTemp.Tables[0].Rows){ // Cherche la ligne du dataTable
                    if (l[colTabl].ToString() == valFind){
                        lmem = l;
                        lin = dsTemp.Tables[0].Rows.IndexOf(lmem);
                    }
                }
                if (posAfter < 0 || posAfter > dsTemp.Tables[0].Rows.Count) return lmem;
                object[] arrayRow = lmem.ItemArray; // memorise le contenu avant effacement
                lmem.Delete();                      // efface la ligne
                dsTemp.Tables[0].Rows.InsertAt(lmem, posAfter );// réinsere la ligne
                dsTemp.Tables[0].Rows[posAfter ].ItemArray = arrayRow; // repeuple la ligne inserée
                return lmem;
            }

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 25/08/2011, 15h53
  2. Réponses: 6
    Dernier message: 06/01/2010, 14h48
  3. [C#]ordre de tri inversé dans un datagridview
    Par ClaudeBg dans le forum Windows Forms
    Réponses: 2
    Dernier message: 28/02/2009, 17h26
  4. Tri dans un Datagridview
    Par edertef dans le forum Windows Forms
    Réponses: 6
    Dernier message: 09/02/2008, 16h29
  5. Tri ordre alpha dans une table.
    Par Aurèl90 dans le forum Access
    Réponses: 2
    Dernier message: 19/12/2005, 12h29

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