Garder la sélection dans un datagrid après le tri sur une colonne

0/5 (1 avis)

Vue 5 665 fois - Téléchargée 719 fois

Description

Lorsqu'on trie les données dans un DataGrid en cliquant sur une entête de colonne, la sélection est perdue.
Voici un exemple qui montre comment faire pour mémoriser la sélection AVANT que le tri ne soit effectué, puis restituer cette sélection une fois le tri fait :

Schématiquement, il faut :
- créer une classe qui hérite de DataGrid
- dans cette classe, il faut surcharger la méthode OnMouseDown, identifier le(s) enregistrement(s) sélectionné(s), stocker leur code de hashage dans un tableau grâce au CurrencyManager de la grille, et enfin appeler MyBase.OnMouseDown pour que le tri se fasse
- il faut également surcharger la méthode OnMouseUp, retrouver les enregistrements à sélectionner en comparant leur code de hashage avec ceux mémorisés auparavant, et enfin appeler MyBase.OnMouseUp

L'utilisation du CurrencyManager est indispensable pour identifier de manière UNIQUE les enregistrements dans la grille. En effet, si les données de la grille ne possèdent pas de clé primaire, c'est à dire aucune colonne qui identifie de manière UNIQUE chaque enregistrement, on ne peut pas se servir du code de hashage des valeurs contenues dans la clé primaire.
CurrencyManager.List.Item(index_enregistrement).GetHashCode retourne un Int32 UNIQUE pour chaque enregistrement, même si plusieurs d'entre eux contiennent les même valeurs dans leurs champs.

Source / Exemple :


voir fichier zip

Conclusion :


J'espère que c'est clair...

Codes Sources

A voir également

Ajouter un commentaire

Commentaire

cs_bidouille007
Messages postés
257
Date d'inscription
jeudi 11 septembre 2008
Statut
Membre
Dernière intervention
22 décembre 2012
1 -
on peut aussi également empêcher le trie sur chaque colonne du datagrid en faisant :

Liste_groupes.Columns("Nom").SortMode = DataGridViewColumnSortMode.NotSortable

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.