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 :
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...
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); } } }
Un exemple pour illuster. La colonne NOM est triee par ordre decroissant :
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_IVIO 2 R_IVIO 3 R_IVIO
Une des valeurs n'est pas remplacee car la methode a suivi cet ordre de cellule:
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
Premier passage, c'est la cellule 3 qui est remplacee, puis l'ordre decroissant remis :
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 // Cette cellule est passee de l'indice 3 a 1 2 R_IVIO // a cause du tri par ordre decroissant 3 R_IVIO
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.
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
Resultat :
Quelqu'un pourrait m'aider a pouvoir remplacer les 3 cellules correctement ?
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
Partager