Classe vb.net permettant de changer la couleur d'une cellule ou d'une ligne de son choix dans un controle datagrid

Description

Voici une Classe dérivée de la classe DataGridTextBoxColumn.
Elle permet de définir un DataGridColumnStyle pour colorier le fond et le texte d'une cellule d'un controle DataGrid.
Il existe un exemple dans la doc en ligne de Microsoft, mais il est un peu limitant. J'ai essayé de faire une classe qui fonctionnera dans tous les cas.

Principe :
- définir un 'DataGridTableStyle'

- pour chacune des colonnes du Datagrid, définir un DatagridColumnStyle. Ca sera un DataGridTextBoxColumn, ou un DataGridBoolColumn, ou un "ColoredTextBoxColumn" (le mien)

- les ajouter à la collection 'GridColumnStyles' du 'DataGridTableStyle'

- pour chaque colonne, ajouter un gestionnaire pour l'évènement 'SetCellFormat'. Ce gestionnaire sera exécuté pour chaque cellule qui sera redessinée. Ce gestionnaire devra positionner le booléen 'ChangeCellColor' du paramètre de type 'DataGridFormatCellEventArgs)' :
  • soit à True si la cellule qui est en train d'être redessinée doit être colorée
  • soit à False autrement

C'est donc le programme appelant qui détermine quelles cellules doivent être colorées ou pas, entre autres grace au contenu de la cellule courante vie le champ 'CurrentCellValue'. Cela ne limite pas le fonctionnement de la classe "ColoredTextBoxColumn".
(si aucun gestionnaire d'évènement n'est ajouté pour une colonne, les cellules ne sont jamais colorées)

- ajouter le 'DataGridTableStyle' à la collection 'TableStyles' du DataGrid

- la méthode 'SetColumnBrushes' permet de spécifier pour chaque colonne, la couleur de fond de la cellule, la couleur du texte, et d'indiquer si on veut que la couleur de la cellule reste active même lorsque la ligne du DataGrid est sélectionnée. Par défaut, la ligne sélectionnée devient bleue, mais si le paramètre 'currentSelectionUnder' vaut True, les cellules de la colonne concernée gardent la couleur définie juste avant par 'SetColumnBrushes'.
(si la méthode 'SetColumnBrushes' n'est pas appelée pour une colonne qur laquelle un gestionnaire d'évènements de type 'SetCellFormat' a été ajouté, la couleur de fond des cellules à colorier sont par défaut : Rouge pour le fond, Blanc pour le texte, et le fonctionnement des lignes sélectionnées reste celui par défaut)

On peut donc gérer une couleur de fond et de texte par colonne (mais c'est la même couleur pour toutes les cellules d'une même colonne), et des critères d'affichage par colonne.

EXEMPLE
=======

le projet joint contient deux DataGrid avec des fonctionnements différents, qui je pense couvrent pas mal de cas.

AMELIORATIONS
=============
L'idéal serait de pouvoir gérer une couleur de fond et de texte PAR CELLULE, mais là c'est autre chose !

Voilà

Conclusion :


contactez-moi en cas de problème

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.