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

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

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.