Visual C# - 更改特定行上特定单元格的文本颜色

时间:2016-03-01 21:35:41

标签: datagridview

我已经花了一个星期的限制,现在我有点沮丧。我试图改变特定datagridview单元格的颜色,但是根据它之前的行中的相同单元格是否是一个不同的值,我试图无济于事。它是一个比较数据网格视图,所以我想突出显示记录1字段x与记录2字段x不同。 datagridview是通过一些繁重的工作构建的,一旦构建完毕,我想循环遍历所有单元格并突出显示2条记录之间不相等的区域(但不是整个行,而只是两条记录中的单元格)。 / p>

所以,我的datagridview可能如下所示:

field 1    field 2     field3     field4     field5
value1     value2      value3     value4     value5
value1     value2      value8     value7     value5

在这种情况下,我想将字段3中的单元格突出显示为红色,将字段4中的单元格重新显示为红色,因为2个值不同。此datagridview表中只有2条记录,因为它旨在并排显示2条完整记录以进行比较。如果需要,我可以在这里复制一些代码,但我很确定我已经尝试了除正确方法之外的所有方法。他们当然可以改进datagridview的着色方法,并使其更简单一些。有人有主意吗?谢谢!

2 个答案:

答案 0 :(得分:1)

像...一样的东西。

dataGridView1.Rows[rowIndex].Cells[columnIndex].Style.ForeColor = Color.Red;

...

答案 1 :(得分:1)

为了完整性,将颜色设置为Simo suggested,您可以使用CellFormatting方法执行此操作。从链接:

  

每次绘制每个单元格时都会发生CellFormatting事件,因此在处理此事件时应避免冗长的处理。检索单元格FormattedValue或调用其GetFormattedValue方法时也会发生此事件。

基本上,只要该列中的单元格重新绘制,以下解决方案就会为格式化列的单元格设置ForeColor - 这会在值更改,鼠标悬停/单击/等,窗体或单元格获得焦点时发生突出显示,ET AL。因为你只有两行,所以简单:

this.dataGridView1.CellFormatting += DataGridView1_CellFormatting;

private void DataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
    if (this.dataGridView1[e.ColumnIndex, 0].Value.ToString() != this.dataGridView1[e.ColumnIndex, 1].Value.ToString())
    {
        this.dataGridView1[e.ColumnIndex, 0].Style.ForeColor = Color.Red;
        this.dataGridView1[e.ColumnIndex, 1].Style.ForeColor = Color.Red;
    }
    else /*See Note */
    {
        this.dataGridView1[e.ColumnIndex, 0].Style.ForeColor = Color.Black;
        this.dataGridView1[e.ColumnIndex, 1].Style.ForeColor = Color.Black;
    }
}

注意:如果您能够编辑单元格值,请考虑我添加的else-statement - 更改列的单元格的值以匹配先前它们不同的将离开文字红色,没有附加代码。