web-dev-qa-db-fra.com

Modification dynamique de la couleur de la cellule datagridview

J'ai un objet dataGridView qui est rempli de données. Je veux cliquer sur un bouton et le faire changer la couleur de l'arrière-plan de la cellule. C'est ce que j'ai actuellement

foreach(DataGridViewRow row in dataGridView1.Rows)
{
    foreach(DataGridViewColumn col in dataGridView1.Columns)
    {
            //row.Cells[col.Index].Style.BackColor = Color.Green; //doesn't work
            //col.Cells[row.Index].Style.BackColor = Color.Green; //doesn't work
        dataGridView1[col.Index, row.Index].Style.BackColor = Color.Green; //doesn't work
    }
} 

TOUTES ces trois causes font que la table se redessine sur elle-même de manière à se chevaucher et essayer de redimensionner les tables devient un désordre. lorsque vous cliquez sur une cellule, la valeur reste en surbrillance et la couleur de fond ne change pas. 

Q: Comment puis-je changer la couleur de fond d'une cellule individuelle après l'existence du tableau?

20
fifamaniac04

Ça marche pour moi

dataGridView1.Rows[rowIndex].Cells[columnIndex].Style.BackColor = Color.Red;
56
Ehsan

Implémentez votre propre extension de DataGridViewTextBoxCell et substituez la méthode Paint comme ceci:

class MyDataGridViewTextBoxCell : DataGridViewTextBoxCell
{
    protected override void Paint(Graphics graphics, Rectangle clipBounds, Rectangle cellBounds, int rowIndex,
        DataGridViewElementStates cellState, object value, object formattedValue, string errorText,
        DataGridViewCellStyle cellStyle, DataGridViewAdvancedBorderStyle advancedBorderStyle, DataGridViewPaintParts paintParts)
    {
        if (value != null)
        {
            if ((bool) value)
            {
                cellStyle.BackColor = Color.LightGreen;
            }
            else
            {
                cellStyle.BackColor = Color.OrangeRed;
            }
        }
        base.Paint(graphics, clipBounds, cellBounds, rowIndex, cellState, value,
            formattedValue, errorText, cellStyle, advancedBorderStyle, paintParts);
}

}

Ensuite, dans le code, définissez la propriété CellTemplate de votre colonne sur une instance de votre classe.

columns.Add(new DataGridViewTextBoxColumn() {CellTemplate = new MyDataGridViewTextBoxCell()});
3
Pavel

Merci ça marche 

ici, je suis fait avec cela par domaine qté est zéro signifie qu'il a montré que les cellules sont en couleur rouge

        int count = 0;

        foreach (DataGridViewRow row in ItemDg.Rows)
        {
            int qtyEntered = Convert.ToInt16(row.Cells[1].Value);
            if (qtyEntered <= 0)
            {
                ItemDg[0, count].Style.BackColor = Color.Red;//to color the row
                ItemDg[1, count].Style.BackColor = Color.Red;

                ItemDg[0, count].ReadOnly = true;//qty should not be enter for 0 inventory                       
            }
            ItemDg[0, count].Value = "0";//assign a default value to quantity enter
            count++;
        }

    }
1
Rakesh

Considérer utiliser l'événement DataBindingComplete pour mettre à jour le style. Le code suivant change le style de la cellule:

    private void Grid_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
    {
        this.Grid.Rows[2].Cells[1].Style.BackColor = Color.Green;
    }
0
Ángel Ibáñez