我已经花了一个星期的限制,现在我有点沮丧。我试图改变特定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的着色方法,并使其更简单一些。有人有主意吗?谢谢!
答案 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
- 更改列的单元格的值以匹配先前它们不同的将离开文字红色,没有附加代码。