2010-01-08 5 views
1

J'ai joué avec un peu de datagridviews et une question a été soulevée. -> Ne modifie pas un arrière-plan de cellules à partir de l'événement CellFormatting. J'ai essayé ceci:Arrière-plan de la cellule dans un DataGridView

private void dataGridView1_CellFormatting(object sender, dataGridViewCellFormattingEventArgs e) 
{ 
    if (dataGridView1.Columns[e.ColumnIndex].Name.Equals(dnsList.First<String>())) 
    { 
     DataGridViewRow row = dataGridView1.Rows[e.RowIndex]; 
     DataGridViewCell cell = row.Cells[e.ColumnIndex]; 
     cell.Style.BackColor = Color.FromArgb(194, 235, 211); 
    } 
} 

qui fonctionne parfaitement, alors que ceci:

private void ApplyColoring() 
{ 
    if (dataGridView1.DataSource != null) 
    { 
     foreach (DataGridViewRow dataGridRow in dataGridView1.Rows) 
     { 
      DataGridViewCell cell = dataGridRow.Cells[dnsList.First<String>()]; 
      cell.Style.BackColor = Color.FromArgb(194, 235, 211); 
     } 
    } 
} 

Debugging me dit que tout est son, null-référence ou tout-sauf-sage ... Des conseils?

+0

Quand appelez-vous la méthode ApplyColoring? –

+0

Je voudrais l'appliquer après la fin d'un BackgroundWorker. Donc, dans le contexteWorker_RunWorkerCompleted. Ce bgworker est exécuté via un bouton, j'ai donc essayé d'utiliser l'événement b_Click (..) avec les mêmes résultats (rien). – Oxymoron

+0

Résolu en utilisant un délégué :) – Oxymoron

Répondre

1

Vous devez effectuer la coloration en cas CellPainting, plutôt que CellFormatting, qui est destiné à formater la valeur de la cellule

+0

Ah, ce serait beaucoup mieux en effet :) – Oxymoron

0

Je suggère d'appeler votre méthode depuis l'événement DataBindingComplete de la grille. L'appel de BackgroundWorker est probablement trop tôt et DataGridView.Rows n'est pas encore initialisé.

 

private void dataGridView1_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e) 
{ 
     ApplyColoring(); 
} 
 
+0

Nah, de cette façon, il continue à être déclenché 5000millions de fois, je l'ai résolu en utilisant un délégué :) – Oxymoron

+0

Délégué appelé d'où? Peut-être pourriez-vous éditer votre réponse et expliquer votre solution? :) –

+0

Un délégué de l'événement RunWorkerCompleted; this.Invoke ((Action) delegate {ApplyColoring();}); – Oxymoron

Questions connexes