Ceci est un problème d'application WinForm C#.DataGridView n'appelle pas la méthode Paint lorsque InvalidateCell est appelée
J'ai un DataGridView et j'ai besoin d'un type personnalisé de DataGridViewColumn de sorte que lorsque ma souris est sur une cellule de cette colonne, la cellule y peint quelque chose de spécial. J'ai trouvé a way de surcharger le DataGridViewTextBoxCell pour faire la peinture moi-même. Cet article montre un exemple d'implémentation d'une cellule de roll-over de telle sorte que lorsque vous déplacez votre souris sur une cellule, elle dessine un rectangle rouge autour des limites de sa propre cellule.
Si vous voyez l'exemple, vous découvrirez que la façon dont l'exemple remplit les données est de créer directement des lignes dans la grille. Lorsque j'utilise la liaison de données plutôt que le remplissage direct de lignes, je trouve que les cellules ne se peignent pas elles-mêmes au début. En fait, vous devez d'abord sélectionner une cellule, puis toutes les cellules de cette ligne seront peintes correctement. Si vous ne sélectionnez pas une cellule d'une ligne, toutes les cellules de cette ligne ne seront pas peintes en conséquence lorsque la souris les dépasse.
Je pense qu'il s'agit d'une sorte d'optimisation de la grille de sorte que lorsque vous sélectionnez une cellule, l'objet sous-jacent de cette ligne est activé et la grille appelle la méthode Paint lorsque la méthode InvlidateCell est appel. Mais si l'objet sous-jacent d'une ligne n'est pas activé, la grille va simplement peindre les cellules par défaut pour gagner du temps.
De toute évidence, je n'ai pas besoin de l'optimisation mais de la lenteur. Cela n'a pas d'importance dans mon cas car mes données sur cette grille ne deviennent jamais trop grandes. Comment puis-je y arriver? J'essaye d'appeler grid.Refresh() après que les données soient liées à la grille mais cela n'aide pas.
Nous vous remercions de votre suggestion.
Ji
Si je mets this.DataGridView.Refresh() dans les méthodes OnMouseEnter et OnMouseLeave, le problème est résolu. Mais cela provoque le clignotement de toute la grille pendant que la souris bouge dessus. Je crois que ce n'est pas une bonne solution. – Steve