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 :

Deplacer row up / dow dans datagridview


Sujet :

C#

  1. #1
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut Deplacer row up / dow dans datagridview
    Bonjour

    Je cherche la methode la plus éléguante de déplacer un row up / down dans un datagridview
    Le datagridview est bindé a une datatable

    Quelqu'un a une idée ?

  2. #2
    Membre expert
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 210
    Points : 3 015
    Points
    3 015
    Par défaut
    J'ai eu ce besoin justement très récemment et j'ai posé cette même question et n'ai pas eu vraiment de réponse...

    Voici le lien vers ce post avec la solution que j'ai trouvé : post 504201

    Si tu trouve une solution plus élégante je suis preneur

  3. #3
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut Je percoit une autre methode !
    Si tu a lié ton DGV avec un bindingsource
    Si tu a ajouté dans ta datatable une colonne de valeurs disons un integer ordinal
    Tu a setté le sort du binding source sur cette colonne (qui a mon avis peut etre cachée dans le dgv)

    Up et Down et tu swape les valeurs
    J'ai pas essayé mais je trouve l'idée amusante

  4. #4
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut Encore un commentaire
    J'ai bricolé un petit test et ca semble bien marché

    Bien entendu il ne faut pas que l'utilisateur clique sur une autre colonne pour retrier le dgv
    Mais ca c'est vrai dans TOUS les cas pour ce type d'action, je pense qu'il faut disabler le sort par user click sinon ca sert a rien de se casser le noeud a reorganiser les row chirurgicalement si d'un coup de souris l'utilisateur innocent peu tout casser !!

  5. #5
    Membre expert
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 210
    Points : 3 015
    Points
    3 015
    Par défaut
    En réalité je fais une copie de la row entiere que je souhaite déplacer (soit celle qui est sélectionnée). Une fois la copie effectuée, je supprime la ligne sélectionnée, puis j'insère la copie à la ligne d'indice voulu (selon le Up ou le Down)

    ps : bien entendu le tri des colonnes est désactivé... Je ne l'avais pas précisé dans mon post

  6. #6
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut Ok
    Salut

    Oui j'avais bien compris ce que tu faisais mais c'est ce que je trouve comme toi un peu lourd

    Que pense tu de mon idée d'utiliser un tri automatique sur une colonne complémentaire cachée (ou pas) dont tu swappe les valeurs

  7. #7
    Membre expert
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 210
    Points : 3 015
    Points
    3 015
    Par défaut
    Oui ça pourrait le faire comme ca aussi.

    Une façon de contourner les choses, mais est-ce plus simple (plus élégant, performant) de modifier toutes les valeurs de ta table (ta solution si je l'ai bien compris demande de modifier la valeur de la colonne d'integer non ?)

  8. #8
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut presque !
    Il ne faudara pas changer les valeur dans toute la colonne


    Exemple

    1 toi
    2 moi
    3 lui
    4 pomme
    5 poire
    6 tomate

    Si tu veux remonter pomme sur lui
    Tu inverse seulement 2 valeurs pomme=3, lui=4
    On retrie et hop !!
    Et ainsi de suite

    L'avantage a mon avis (mais il faut essayer) c'est aussi que si on travaille avec un datagridview bindé tu pourrais ajouter cette colonne et la traiter indépendemment des data réellement bindées

  9. #9
    Membre expert
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 210
    Points : 3 015
    Points
    3 015
    Par défaut
    Citation Envoyé par olibara
    Il ne faudara pas changer les valeur dans toute la colonne
    Oui c'est vrai.

    Citation Envoyé par olibara
    L'avantage a mon avis (mais il faut essayer) c'est aussi que si on travaille avec un datagridview bindé tu pourrais ajouter cette colonne et la traiter indépendemment des data réellement bindées
    a voir ...

  10. #10
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut Allez on essaye
    Bon

    Tu essaye et tu me dis quoi

    ......

    Si j'ai qq chose qui roule bien, je t'informe

  11. #11
    Membre expert
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 210
    Points : 3 015
    Points
    3 015
    Par défaut
    Je ne pense pas faire le test. Je ne suis pas vraiment convaincu sur cette solution en fait.

    D'autant plus que les fonctionnalités 'Supprimer une ligne' et 'Insérer une ligne' vont avoir un impact sur le numérotation. Voilà pourquoi je trouve cette solution un peu galère et ça reste à mon avis de la bidouille

  12. #12
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut Ca avance !!
    Salut

    Ajout d'une colone non bindée : OK (mais au design, je dois encore digerer comment faire au run time)
    Ajout d'un ordinal dans la colonne : OK
    Test si la colonne ne perturbe pas le bind OK (jusqu'a la mise a jour utilisant MySqlCommandBuilder)

    Maintenant

    Je dois organiser le tri sur la colonne et disabler le tri sur les autres : au run time
    Je dois definir un comparer pour ma colonne ?
    As tu qq conseil

  13. #13
    Membre expert
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 210
    Points : 3 015
    Points
    3 015
    Par défaut
    Pas vraiment.

    Juste un : "Bon Courage"

  14. #14
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut Ajouter supprimer
    Citation Envoyé par binoo Voir le message
    Je ne pense pas faire le test. Je ne suis pas vraiment convaincu sur cette solution en fait.

    D'autant plus que les fonctionnalités 'Supprimer une ligne' et 'Insérer une ligne' vont avoir un impact sur le numérotation. Voilà pourquoi je trouve cette solution un peu galère et ça reste à mon avis de la bidouille
    Impact tres facilement gerable
    1- Suprimez = aucun impact
    2- Ajouter = il suffit de forcer un numero sur base du nombre de row connu !!

    A mon avis c'est beaucoup moins de bidouille que ta solution qui est asser complexe a mettre en oeuvre si tu travaille avec un DGV bindé

    Tandis que ma solution ne touche pas au données ET EN PLUS elle n'exclut pas un tri sur une autre colonne qui aurait chez toi pour effet de perdre tout le travail effectué !!

  15. #15
    Membre expert
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 210
    Points : 3 015
    Points
    3 015
    Par défaut
    Il faut déjà savoir que j'ai une application particulière et que je suis resté fixé dessus. J'interdis le tri des colonnes obligatoirement, c'est donc pas un problème pour moi.

    Et je sais pas pourquoi mais j'avais à l'esprit que tu mettait cette colonne (colonne d'indice) en base
    Pourtant cette pas faute de l'avoir signalé ...

  16. #16
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut La mecanique est ok
    Salut,

    La mecanique est ok

    J'ai encore eu un petit souci avec la colonne d'indice
    Je pensais pourvoir la garder non bindée mais IMPOSSIBLE de trier sur une
    colonne non bindée

    Pas de problème, j'ai creé une colonne speciale a dans le remplissage du datasource qui n'interviendra pas dans les MAJ


    Mais maintenant, j'aimerais trouver l'indice du current row selectionné histoire de trouver faciliment celui au dessus et celui en dessous et je trouve pas !!(rien n'est simple)

  17. #17
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut Et voilà
    Voila un truc qui marche "presque" bien

    J'ai encore un raté inexplicable quand je change de direction (l'avant dernier du sens precédent ne se deplace pas)

    Je soumets au yeux des gurus

    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
        private void up_Click(object sender, EventArgs e)
        {
          int i = dgv_ContUpd.CurrentRow.Index;
          int n;
          int.TryParse(dgv_ContUpd.Rows[i].Cells["Xorder"].Value.ToString(),out n);
     
          dgv_ContUpd.Rows[i].Cells["Xorder"].Value = dgv_ContUpd.Rows[i-1].Cells["Xorder"].Value;
          dgv_ContUpd.Rows[i-1].Cells["Xorder"].Value = n;
          dgv_ContUpd.Sort(dgv_ContUpd.Columns["Xorder"], ListSortDirection.Ascending);
          i--;
          dgv_ContUpd.CurrentCell = dgv_ContUpd[9,i];
        }
     
        private void dn_Click(object sender, EventArgs e)
        {
          int i = dgv_ContUpd.CurrentRow.Index;
          int n;
          int.TryParse(dgv_ContUpd.Rows[i].Cells["Xorder"].Value.ToString(), out n);
     
          dgv_ContUpd.Rows[i].Cells["Xorder"].Value = dgv_ContUpd.Rows[i+1].Cells["Xorder"].Value;
          dgv_ContUpd.Rows[i+1].Cells["Xorder"].Value = n;
          dgv_ContUpd.Sort(dgv_ContUpd.Columns["Xorder"], ListSortDirection.Ascending);
          i++;
          dgv_ContUpd.CurrentCell = dgv_ContUpd[9, i];
        }

Discussions similaires

  1. [Débutant] Copier/ coller d'une Row d'un Datagriview 2 dans Datagridview 1
    Par jeremyvb11 dans le forum VB.NET
    Réponses: 16
    Dernier message: 14/01/2013, 20h35
  2. limiter le nombre de row dans DataGridview
    Par olibara dans le forum C#
    Réponses: 2
    Dernier message: 08/05/2008, 17h04
  3. statut row dans datagridview
    Par Elwe31 dans le forum VB.NET
    Réponses: 1
    Dernier message: 03/03/2008, 13h05
  4. Selectionner une row dans DataGridView
    Par boulo dans le forum Windows Forms
    Réponses: 3
    Dernier message: 28/03/2007, 00h17
  5. [vb 2005]Taille du texte dans datagridview
    Par estelledany dans le forum Windows Forms
    Réponses: 2
    Dernier message: 01/06/2006, 14h24

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