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

VB.NET Discussion :

inverser deux lignes dans un datagridview ?


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    251
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 251
    Par défaut inverser deux lignes dans un datagridview ?
    Bonjour,

    J'ai une structure contenant plein d'info, j'affiche le contenu de mes differents enregistrement de ma structure dans un datagridview. J'aimerai donner la possibilité a l'utilisateur de monter un ligne ou de la descendre en gros d'ordonner la liste de mastructure.

    Pour monter, j'ai un code qui ressemble à ça, j'ai pourtant parfois un resultat assez etrange comme si l'une des lignes remontai en derniere position alors que j'inverse uniquement deux lignes du centre ????

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
                savepos = DataGridView1.CurrentCell.RowIndex
                fichier.Mestest.Add(New MaStructureTest) 'on ajoute un test vierge
                fichier.Mestest(fichier.Mestest.Count - 1) = fichier.Mestest(DataGridView1.CurrentCell.RowIndex - 1)
                fichier.Mestest(DataGridView1.CurrentCell.RowIndex - 1) = fichier.Mestest(DataGridView1.CurrentCell.RowIndex)
                fichier.Mestest(DataGridView1.CurrentCell.RowIndex) = fichier.Mestest(fichier.Mestest.Count - 1)
                fichier.Mestest.Remove(fichier.Mestest(fichier.Mestest.Count - 1))
                RefreshTestList() 'fonction pour raffraichir le contenu de mon datagridview
                DataGridView1.CurrentCell = DataGridView1.Rows(savepos - 1).Cells(0)

  2. #2
    Membre Expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 793
    Par défaut
    Bonjour,

    pourrait-on savoir ce que sont "fichier", "savepos" et "Mestest" ?

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    251
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 251
    Par défaut
    fichier c'est une structure incluant un liste de mestests dedans

    savepos est un entier déclaré juste avant qui me permet de sauvegarder la position de l'enregistrement selectionné juste avant d'inverser mes lignes. Le but etant à la fin apres avoir rafraichi le datagrigview de le selectionner de nouveau.

    mestest est une structure avec plein de paramètres x et y ...

    Le but a la fin est de sérialiser dans XML ma structure fichier pour sauvegarder tout ça.

  4. #4
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 197
    Billets dans le blog
    1
    Par défaut
    Inspire-toi de cet exemple :

    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
     
    using System;
    using System.Collections.Generic;
     
    namespace SwapList
    {
        class Program
        {
            static void Main(string[] args)
            {
                List<Test> lst = new List<Test>(10);
     
                for (int i = 0; i < 10; i++)
                {
                    lst.Add(new Test("Ligne " + i.ToString()));
                }
     
                Console.WriteLine("Ordre original :");
                foreach (Test t in lst)
                {
                    Console.WriteLine(t);
                }
     
                Console.WriteLine("Swap de la ligne 3 et de la ligne 6");
                Swap<Test>(lst, 3, 6);
     
                Console.WriteLine("Ordre après changement :");
                foreach (Test t in lst)
                {
                    Console.WriteLine(t);
                }
     
                Console.ReadKey(true);
            }
     
            private static void Swap<T>(List<T> l, int idx1, int idx2)
            {
                T t = l[idx1];
                l.Insert(idx1, l[idx2]);
                l.RemoveAt(idx1 + 1);
                l.RemoveAt(idx2);
                l.Insert(idx2, t);
            }
        }
     
        class Test
        {
            private string _txt;
     
            public Test(string txt)
            {
                _txt = txt;
            }
     
            public override string ToString()
            {
                return _txt;        
            }
        }
    }
    -> Au "static" près, tu devrais pouvoir reprendre ma méthode Swap.

  5. #5
    Membre Expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 793
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    fichier.Mestest(DataGridView1.CurrentCell.RowIndex - 1) = fichier.Mestest(DataGridView1.CurrentCell.RowIndex)
    fichier.Mestest(DataGridView1.CurrentCell.RowIndex) = fichier.Mestest(fichier.Mestest.Count - 1)
    C'est la logique qui n'est pas bonne

    Tu as 4 lignes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    1 - A
    2 - B
    3 - C
    4 - D
    Tu est positionné sur C
    Tu descends B à l'index de C, tu obtiens

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    1 - A
    2 - C
    3 - B
    4 - D
    Ensuite tu dis que l'index de C est égal au dernier index

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    1 - A
    2 - B
    3 - D
    4 - C
    De plus ton code est un peu brouillon puisque d'un côté tu te base sur le datagridview, et de l'autre sur ton objet.

    Si tu cherches juste à inverser la ligne sélectionnée avec celle du dessus, ta première ligne suffit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fichier.Mestest(DataGridView1.CurrentCell.RowIndex - 1) = fichier.Mestest(DataGridView1.CurrentCell.RowIndex)

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    251
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 251
    Par défaut
    Le soucis est uniquement au niveau de la suppression de mon enregistrement temporaire placé en fin de liste, je n'utilisai pas la bonne fonction :

    voici la bonne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    fichier.Mestest.RemoveAt(fichier.Mestest.Count - 1)
    Ensuite mon code n'etais pas vraiment propre effectivement j'ai corrigé ça en utilisant uniquement le savepos.

    Merci pour votre aide

  7. #7
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 197
    Billets dans le blog
    1
    Par défaut
    Je maintiens qu'avec une méthode Swap(liste, index1, index2) ce sera encore plus propre.

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

Discussions similaires

  1. [C#]Sélectionner une ligne dans un datagridview
    Par padodanle51 dans le forum Windows Forms
    Réponses: 7
    Dernier message: 10/03/2013, 09h04
  2. Inverser colonnes-lignes dans un datagridview
    Par gazier20 dans le forum Accès aux données
    Réponses: 2
    Dernier message: 13/11/2007, 22h53
  3. ecrire sur deux ligne dans une button
    Par zidenne dans le forum Delphi
    Réponses: 5
    Dernier message: 27/07/2006, 10h23
  4. [C# 2.0] Séléction de lignes dans un datagridview
    Par bootix dans le forum Windows Forms
    Réponses: 2
    Dernier message: 18/07/2006, 11h26
  5. [C#][VS 2005]Changer la couleur d'une ligne dans un DataGridView
    Par Mast3rMind dans le forum Windows Forms
    Réponses: 5
    Dernier message: 13/07/2006, 23h20

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