2010-12-10 90 views
0

J'essaie désespérément de comprendre comment changer la couleur d'arrière-plan d'une seule cellule dans un winGridViewGridView. J'ai deux colonnes: si je change de contenu dans la deuxième colonne, je veux que la cellule de la première colonne de cette rangée change l'arrière-plan en conséquence.Comment changer la couleur d'arrière-plan d'une seule cellule dans un windows.forms.datagrid?

private void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e) 
    { 
     if (e.ColumnIndex != 0 || e.RowIndex == -1) 
      return; 
     if (dataGridView1.Rows[e.RowIndex].Cells[1].Value.ToString() == "Red") 
      e.CellStyle.BackColor = Color.Red; 
     else 
      e.CellStyle.BackColor = Color.White; 
    } 

    private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e) 
    { 
     if (e.ColumnIndex != 1 || e.RowIndex == -1) 
      return; 
     // dataGridView1.Rows[e.RowIndex].Cells[0]. ??? 
    } 

Le premier gestionnaire d'événements définit la backColor des cellules de la première colonne si elles sont peintes. Le deuxième gestionnaire d'événements doit dire à la première cellule de peindre si la valeur est modifiée. Si je change la largeur des colonnes, il peint la couleur correcte, donc le premier gestionnaire fait le travail. Mais comment déclencher la peinture cellulaire?

Merci de votre aide.

Répondre

0

j'aurais pensé que le montage aurait déclenché une repeindre, mais si cet événement n'est pas courir après l'édition, alors vous devriez être en mesure de forcer la question avec quelque chose comme:

dataGridView1.InvalidateCell(e.RowIndex, 1); 
+0

exactement ce que je cherchais. merci. –

0

OK, voici la mauvaise bidouille:

Si j'insérer

var x = dataGridView1.Columns[0].DefaultCellStyle; 
dataGridView1.Columns[0].DefaultCellStyle = null; 
dataGridView1.Columns[0].DefaultCellStyle = x; 

dans le gestionnaire d'événements CellValueChanged, toute la première colonne est repeint. Donc, ma cellule est également repeinte. Mais ce n'est pas sale, n'est-ce pas?

0

Vous devez créer un objet de style cellule, le définir sur la couleur souhaitée, puis l'appliquer à la cellule active.

private DataGridViewCellStyle CellStyleGreenBackgnd;

CellStyleGreenBackgnd.BackColor = Couleur.LégerGreen;

dataGridView.CurrentCell.Style.ApplyStyle (CellStyleGreenBackgnd);

0

Essayez ce.

dataGridView1.Rows[indexhere].Cells[indexhere].Style.ForeColor = Color.Yellow;