如何在windows.forms.datagrid中更改单个单元格的背景颜色?

时间:2010-12-10 21:42:12

标签: winforms datagrid coding-style cell

我拼命试图想出如何在winforms dataGridView中更改单个单元格的背景颜色。我有两列:如果我更改第二列中的内容,我希望此行第一列中的单元格相应地更改背景。

    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]. ???
    }

第一个事件处理程序设置第一列中单元格的backColor(如果它们已绘制)。如果值已更改,则第二个事件处理程序应告知第一个单元格绘制。如果我更改列宽,它会绘制正确的颜色,因此第一个处理程序可以完成工作。但是如何触发细胞画?

Thanx寻求帮助。

4 个答案:

答案 0 :(得分:0)

好的,这是糟糕的黑客:

如果我插入

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

在CellValueChanged事件处理程序中,重新绘制整个第一列。所以我的细胞也重新粉刷了。但那不脏,不是吗?

答案 1 :(得分:0)

您必须创建一个新的单元格样式对象,将其设置为所需的颜色,然后将其应用于当前单元格。

私有DataGridViewCellStyle CellStyleGreenBackgnd;

CellStyleGreenBackgnd.BackColor = Color.LightGreen;

dataGridView.CurrentCell.Style.ApplyStyle(CellStyleGreenBackgnd);

答案 2 :(得分:0)

我原以为编辑会触发重新绘制,但如果在编辑后没有运行该事件,那么你应该能够强制解决这个问题:

dataGridView1.InvalidateCell(e.RowIndex, 1);

答案 3 :(得分:0)

试试这个。

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