我拼命试图想出如何在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寻求帮助。
答案 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;