Comment changer de couleur de ligne dans datagridview?
Je voudrais changer la couleur d'une ligne particulière dans mon datagridview. La ligne doit être changé au rouge lorsque la valeur de columncell 7 est inférieur à la valeur de columncell 10. Toutes les suggestions sur la façon d'accomplir ceci?
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin pour faire une boucle à travers les lignes dans le datagridview, puis de comparer les valeurs des colonnes 7 et 10 sur chaque ligne.
Essayez ceci:
J'étais juste en train d'étudier ce problème (alors que je sais que cette question a été publié en presque 3 ans, mais peut-être que ça va aider quelqu'un... ), mais il semble qu'une meilleure option est de placer le code à l'intérieur de la
RowPrePaint
événement de sorte que vous n'avez pas à parcourir chaque ligne, seulement ceux qui se peint (donc il fonctionnera beaucoup mieux sur la grande quantité de données:Joindre à l'événement
Le code d'événement
Vous êtes à la recherche pour le
CellFormatting
événement.Ici en est un exemple.
J'ai eu du mal à changer la couleur du texte ainsi - je n'ai jamais vu le changement de couleur.
Jusqu'à ce que j'ai ajouté le code pour changer la couleur du texte à l'événement
DataBindingsComplete
pourDataGridView
. Après cela, il a travaillé.J'espère que cela aidera les gens qui font face au même problème.
Quelque chose comme ce qui suit... en supposant que les valeurs dans les cellules sont des nombres Entiers.
pas testé, alors, toutes mes excuses pour l'erreur.
Si vous connaissez la ligne, vous pouvez passer à l'itération:
Certaines personnes aiment à utiliser la
Paint
,CellPainting
ouCellFormatting
événements, mais notez que la modification d'un style de ces événements les causes des appels récursifs. Si vous utilisezDataBindingComplete
il exécutera qu'une seule fois. L'argument en faveur deCellFormatting
est qu'elle n'est appelée que sur les cellules visibles, de sorte que vous n'avez pas de format non-cellules visibles, mais vous format, à plusieurs reprises.Vous pouvez Modifier
Backcolor
ligne par ligne à l'aide de votre condition.et cet appel de fonction après l'application deDatasource
deDatagridView
.Ici Est la fonction pour cela.
Il suffit de copier et de le mettre après
Databind
C'est ma solution pour changer de couleur pour dataGridView avec bindingDataSource:
Si vous liez à une (collection) des objets concrets, vous pouvez obtenir le concret de l'objet via le DataBoundItem propriété de la ligne. (Pour éviter de vérifier pour la magie des cordes dans la cellule et à l'aide de "réel" propriétés de l'objet)
Squelette exemple ci-dessous:
DTO/POCO
De liaison à la datagridview
alors le gestionnaire d'événements et d'obtenir l'objet concret (au lieu d'un DataGridRow et/ou des cellules)
En général, je tiens à utiliser le contrôle GridView.RowDataBound Événement événement pour cette.
Travaille sur Visual Studio 2010. (J'ai essayé et ça marche!)
Il va peindre l'ensemble de votre ligne.
datagridview
.CellClick
de l'événement et de mettre la ligne de code suivante à l'intérieur d'elle.Vous n'avez pas mentionné la façon dont la valeur est modifiée. J'ai utilisé une fonctionnalité similaire lorsque l'utilisateur est saisie d'une valeur. c'est à dire la saisie et quitter le mode édition.
À l'aide de CellEndEdit cas de datagridview.
Vous pouvez ajouter de la logique de la compensation d'erreur de notification d'une manière similaire.
si, dans votre cas, si des données est chargé de la programmation, puis CellLeave événement peut être utilisé avec le même code.
Avec ce code, vous modifiez uniquement les lignes backcolor où columname valeur est null autres lignes de couleur toujours celui par défaut.
Juste une remarque sur le réglage de
DefaultCellStyle.BackColor
...vous ne pouvez pas définir une valeur transparents saufColor.Empty
. C'est la valeur par défaut. Que faussement implique (pour moi en tout cas) que les couleurs transparentes sont OK. Ils ne sont pas. Chaque ligne j'ai mis à une couleur transparente attire tout de la couleur de certaines lignes.J'ai passé beaucoup trop de temps me frappant la tête contre le mur au-dessus de cette question.
int compteur = gridEstimateSales.Les lignes.Comte;
J'ai atterri ici à la recherche d'une solution pour le cas où je n'ai pas utiliser la liaison de données. Rien n'a fonctionné pour moi, mais je l'ai eu en fin de compte avec: