2010-12-04 7 views
0

J'ai un DataGridView avec quatre colonnes. Les trois premiers sont renvoyés en tant que tableau: rouge, vert et bleu. Toutes les valeurs sont comprises entre 0 et 255. J'ai ajouté par programmation une colonne appelée "Color". J'aimerais que la couleur de fond de cette colonne reflète le contenu RVB. Je peux voir les données rgb correctement, et en utilisant le débogueur, la couleur backcolor est définie correctement sur la propriété. Je peux également définir la couleur de fond de la colonne et elle s'affiche correctement. J'ai essayé de définir la couleur de fond de la cellule "Rouge" et cela ne fonctionne pas non plus.DataGridView Cell Backcolor non défini

Le code ci-dessous donne une colonne complètement blanche.

Voici mon code:

 DataGridViewColumn DGC = new DataGridViewColumn(); 
     DGC.Name = "Colour"; 
     DGC.CellTemplate = new DataGridViewTextBoxCell(); 
     dgPallette.Columns.Add(DGC); 
     foreach (DataGridViewRow DGR in dgPallette.Rows) 
     { 
      Color cellColor = Color.FromArgb(
       int.Parse(DGR.Cells["Red"].Value.ToString()), 
       int.Parse(DGR.Cells["Green"].Value.ToString()), 
       int.Parse(DGR.Cells["Blue"].Value.ToString())); 
      DGR.Cells["Colour"].Style.BackColor = cellColor; 
     } 

Toutes les idées?

Merci à l'avance Jim

Répondre

2

Parfois, je trouve que la définition des couleurs dans le DataGridView ne fonctionne pas comme prévu et finissent par avoir recours à l'utilisation de l'événement DataGridView.CellFormatting - ce fait toujours l'affaire, et il est assez simple d'obtenir votre tête autour.

Souvent, des problèmes de formatage se posent lorsque la grille est liée à une source de données, en particulier lorsque vous autorisez le tri. Cet événement surmonte cela.

+0

Merci. Le contenu de la grille de données dépend d'une liste déroulante. J'ai accroché dans l'événement de changement selecteditem pour appeler le code ci-dessus contre le nouveau tableau retourné, et les couleurs s'affichent correctement. J'ai essayé d'appeler datagridview.Update() après le code, mais la première mise à jour ne se produit pas .... – Spodgy

+0

Merci beaucoup. J'ai implémenté l'événement CellFormatting et cela semble avoir réglé le problème. – Spodgy

+0

dgPallette_CellFormatting private void (object sender, DataGridViewCellFormattingEventArgs e) { if (e.ColumnIndex == dgPallette.Columns [ "couleur"] Index.) { DataGridViewRow DGR = dgPallette.Rows [e.RowIndex]; e.CellStyle.BackColor = Couleur.FromArgb ( int.Parse (DGR.Cells ["Rouge"]. Value.ToString()), int.Parse (DGR.Cells ["Vert"]. Value.ToString ()), int.Parse (DGR.Cells ["Bleu"]. Value.ToString())); } } – Spodgy