Je voudrais changer la couleur d'une ligne particulière dans mon datagridview. La ligne doit être changée en rouge lorsque la valeur de columncell 7 est inférieure à la valeur de columncell 10. Des suggestions sur la façon d'accomplir cela?
143
J'étais juste en train d'enquêter sur ce problème (donc je sais que cette question a été publiée il y a presque 3 ans, mais peut-être qu'elle aidera quelqu'un ...) mais il semble qu'une meilleure option soit de placer le code dans le
RowPrePaint
événement afin que vous ne le fassiez pas. doivent parcourir chaque ligne, seulement celles qui sont peintes (donc il fonctionnera beaucoup mieux sur une grande quantité de données:Joindre à l'événement
Le code de l'événement
la source
Vous recherchez l'
CellFormatting
événement.Voici un exemple.
la source
J'ai également eu du mal à changer la couleur du texte - je n'ai jamais vu le changement de couleur.
Jusqu'à ce que j'ajoute le code pour changer la couleur du texte à l'événement
DataBindingsComplete
pourDataGridView
. Après cela, cela a fonctionné.J'espère que cela aidera les personnes confrontées au même problème.
la source
Quelque chose comme ce qui suit ... en supposant que les valeurs dans les cellules sont des nombres entiers.
non testé, donc excuses pour toute erreur.
Si vous connaissez la ligne particulière, vous pouvez ignorer l'itération:
la source
Certaines personnes aiment utiliser les événements
Paint
,CellPainting
ouCellFormatting
, mais notez que la modification d'un style dans ces événements provoque des appels récursifs. Si vous l'utilisez,DataBindingComplete
il ne s'exécutera qu'une seule fois. L'argument pourCellFormatting
est qu'il est appelé uniquement sur les cellules visibles, vous n'avez donc pas à formater les cellules non visibles, mais vous les formatez plusieurs fois.la source
Vous pouvez changer
Backcolor
ligne par ligne en utilisant votre condition et cet appel de fonction après l'applicationDatasource
deDatagridView
.Voici la fonction pour cela. Copiez simplement cela et mettez-le après
Databind
la source
la source
C'est ma solution pour changer la couleur en dataGridView avec bindingDataSource:
la source
Si vous vous liez à une (collection) d'objets concrets, vous pouvez obtenir cet objet concret via la propriété DataBoundItem de la ligne. (Pour éviter de vérifier les chaînes magiques dans la cellule et d'utiliser les propriétés "réelles" de l'objet)
Exemple de squelette ci-dessous:
DTO / POCO
Liaison au datagridview
puis le gestionnaire d'événements et obtenir l'objet concret (au lieu d'un DataGridRow et / ou de cellules)
la source
J'aime généralement utiliser l'événement GridView.RowDataBound Event pour cela.
la source
Fonctionne sur Visual Studio 2010. (Je l'ai essayé et ça marche!) Il peindra toute votre ligne.
datagridview
.CellClick
événement et placez la ligne de code suivante à l'intérieur.la source
Vous n'avez pas mentionné comment la valeur est modifiée. J'ai utilisé des fonctionnalités similaires lorsque l'utilisateur entre une valeur. c'est-à-dire entrer et sortir du mode d'édition.
Utilisation de l' événement CellEndEdit de datagridview.
Vous pouvez ajouter une logique pour effacer la notification d'erreur de la même manière.
si dans votre cas, si les données sont chargées par programme, l' événement CellLeave peut être utilisé avec le même code.
la source
Avec ce code, vous ne modifiez que la couleur d'arrière-plan des lignes où la valeur de columname est nulle, les autres lignes de couleur restent la couleur par défaut.
la source
Juste une note sur le réglage
DefaultCellStyle.BackColor
... vous ne pouvez pas le définir sur une valeur transparente saufColor.Empty
. C'est la valeur par défaut. Cela implique à tort (pour moi, en tout cas) que les couleurs transparentes sont OK. Ils ne sont pas. Chaque ligne que j'ai définie sur une couleur transparente dessine simplement la couleur des lignes sélectionnées.J'ai passé beaucoup trop de temps à me cogner la tête contre le mur sur cette question.
la source
J'ai atterri ici à la recherche d'une solution pour le cas où je n'utilise pas de liaison de données. Rien n'a fonctionné pour moi mais je l'ai finalement obtenu avec:
la source
Si vous êtes le deuxième développeur le plus stupide de la planète (moi étant le plus stupide), toutes les solutions ci-dessus semblent fonctionner: CellFormatting, DataSourceChanged et RowPrePaint. Je préfère RowPrePaint.
J'ai eu du mal avec cela (pendant trop longtemps) parce que je devais remplacer mes SelectionBackColor et SelectionForeColor au lieu de BackColor et ForeColor pendant que je changeais la ligne sélectionnée.
la source
la source