Bonjour,

J'ai un petit soucis sur une methode de Find and Replace dans un DataGridView. En effet, je parcours les cellules selctionnee et pour chacune d'elles je recherche si la valeure entree est contenue dans la cellule afin d'etre remplacee.

voici le code de ma methode :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
public void FindAndReplace(string TexteFind, string TexteReplace, DataGridView MonDataGRidView)
{
    // Pour chaque cellule selectionnee
    foreach (DataGridViewCell MaCellule in MonDataGRidView.SelectedCells)
    {
        // Si ma cellule possede le texte a chercher, je remplace sa value par le texte a remplacer.
        if (MaCellule.FormattedValue.ToString().Contains(TexteFind))
        {
            MaCellule.Value = MaCellule.Value.ToString().Replace(TexteFind, TexteReplace);
        }
    }
}
Cela marche bien mais voila le probleme : lorsque je fais un tri sur la colonne dans laquelle je fais mon Find and Replace, a chaque valeur changee, la grille se remet en ordre et je me retrouve avec un decalage. Du coup, certaines cellules ne sont pas mises a jour avec le texte a remplacer...

Un exemple pour illuster. La colonne NOM est triee par ordre decroissant :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
       NOM
 
1     R_IVIO
2     R_IVIO
3     R_IVIO
Apres mon find and replace (Find "IVIO", Replace "IVIP") :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
       NOM
 
1     R_IVIP
2     R_IVIP
3     R_IVIO
Une des valeurs n'est pas remplacee car la methode a suivi cet ordre de cellule:

Premier passage, c'est la cellule 3 qui est remplacee, puis l'ordre decroissant remis :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
       NOM
 
1     R_IVIP    // Cette cellule est passee de l'indice 3 a 1
2     R_IVIO    // a cause du tri par ordre decroissant
3     R_IVIO
Deuxieme passge, c'est la cellule 2 qui est remplacee, puis l'ordre decroissant remis :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
       NOM
 
1     R_IVIP    
2     R_IVIP   // Cette cellule est passee de l'indice 2 a 2
3     R_IVIO   // a cause du tri par ordre decroissant
Troisieme passage, c'est la cellule 1 qui est remplacee mais comme l'ordre a change, on retombe sur une cellule deja remplacee, donc aucune modification, fin de la boucle.
Resultat :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
       NOM
 
1     R_IVIP    
2     R_IVIP   
3     R_IVIO
Quelqu'un pourrait m'aider a pouvoir remplacer les 3 cellules correctement ?