VB.NET DataGridView. Comment détruire la dernière rangée ? (suite et fin ?)

Problématique

Vous alimentez par programme une DataGridView. J’entends par là que vous ne l’avez pas reliée à une source de données. Vous avez tout bien ajusté pour que la DataGridView ne fasse pas apparaître la ligne vide qui permet les ajouts manuels mais qui dans votre cas fait vraiment moche.

Pour détruire une ligne quelconque, tout va bien. Mais si vous voulez détruire la dernière ligne, VB.NET vous renvoie le message d’exception

Impossible de supprimer la nouvelle ligne non validée

Dans un précédent post du 28 mai, je proposais une solution mais elle ne me plaisait pas (j’ai laissé le post : il faut reconnaître ses faiblesses). Mais je me suis remis à chercher la solution à ce problème.

Je n’aime pas dire ça mais devant l’abondante littérature des forums à ce sujet, erronée au point que c’en est drôle, j’ai vraiment essayé de lire le MSDN Microsoft sur les énigmes du RemoveAt. Et il me semble bien qu’aussi clairement que Microsoft peut l’écrire (vous voyez ce que je veux dire …) que ce n’est pas possible. Mais j’ai assez perdu de temps sur ce truc.

Alors j’ai trouvé un solution simple et qui fonctionne bien. Et, somme toute, assez élégante.

Solution

Vous voulez supprimer la dernière ligne et vous ne réussissez pas ? Deux cas se présentent :

  1. c’est la dernière et la seule. Vous videz le tableau et vous faites ce qu’il y a faire dans ce cas-là : le remplir à nouveau ou sortir du formulaire. Et hop ! on n’en parle plus
  2. VB.NET ne veut pas supprimer la dernière ligne ? Qu’à cela ne tienne, ce n’est pas un petit VB.NET qui va nous arrêter : vous recopiez l’avant-dernière ligne dans la dernière et vous détruisez l’avant-dernière ligne. Ce qui donne quelque chose du genre :

With grdBooks

row = .CurrentRow.Index

If row = .Rows.Count – 1 Then

.Rows(row).Cells(« col1 »).Value = .Rows(row-1).Cells(« col1 »).Value

.Rows(row).Cells(« col2 »).Value = .Rows(row-1).Cells(« col2 »).Value

.Rows(row).Cells(« coln »).Value = .Rows(row-1).Cells(« coln »).Value

.Rows.RemoveAt(row-1)

Else

.Rows.RemoveAt(row)

End If

End With

Et en fin de compte, je suis assez content de moi.

Et si vous voulez savoir comment on sélectionne (et désélectionne), je vous renvoie à mon post du 10 mai.

ET LE TOUR EST JOUÉ ! ALORS ON DIT MERCI QUI ?

Laisser un commentaire