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

Datagridview Visual C#-更改特定行上特定单元格的文本颜色,datagridview,Datagridview,我在这上面花了一周的时间,现在我有点沮丧了。我正在尝试更改特定datagridview单元格的颜色,这是徒劳的,因为这取决于前一行中的同一单元格是否是不同的值。这是一个compare datagridview,所以我想突出显示记录1字段x与记录2字段x的不同之处。datagridview是通过一些繁重的工作构建的,构建完成后,我希望遍历所有单元格,突出显示两条记录之间不相等的单元格(但不是整行,只是两条记录中的单元格) 因此,我的datagridview可能如下所示: field 1 fi

我在这上面花了一周的时间,现在我有点沮丧了。我正在尝试更改特定datagridview单元格的颜色,这是徒劳的,因为这取决于前一行中的同一单元格是否是不同的值。这是一个compare datagridview,所以我想突出显示记录1字段x与记录2字段x的不同之处。datagridview是通过一些繁重的工作构建的,构建完成后,我希望遍历所有单元格,突出显示两条记录之间不相等的单元格(但不是整行,只是两条记录中的单元格)

因此,我的datagridview可能如下所示:

field 1    field 2     field3     field4     field5
value1     value2      value3     value4     value5
value1     value2      value8     value7     value5
在本例中,我想突出显示字段3中的单元格为红色,字段4中的单元格为红色,因为这两个值不同。此datagridview表中只有2条记录,因为它打算并排显示2条完整记录以供比较。如果需要的话,我可以在这里复制一些代码,但是我很确定除了正确的方法之外,我已经尝试了所有的方法。他们当然可以改进datagridview的着色方法,使其更加简单。有人有什么想法吗?谢谢

类似于

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

…?

为完整起见,将颜色设置为,您可以在方法中执行此操作。从链接:

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

基本上,以下解决方案将在格式化列中的单元格重新绘制时为该列的单元格设置
ForeColor
,这发生在值更改、鼠标悬停/单击/etc、窗体或单元格获得焦点或高亮显示等情况下。由于您只有两行,因此操作简单:

this.dataGridView1.CellFormatting+=dataGridView1\u CellFormatting;
私有void DataGridView1_CellFormatting(对象发送方,DataGridViewCellFormattingEventArgs e)
{
如果(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/*见注*/
{
this.dataGridView1[e.ColumnIndex,0].Style.ForeColor=Color.Black;
this.dataGridView1[e.ColumnIndex,1].Style.ForeColor=Color.Black;
}
}

<>注释:如果您能够编辑单元格值,请考虑“<代码>其他语句< /代码> >我添加了-更改列的单元格的值以匹配以前不同的单元格将在没有附加代码的情况下使文本变为红色。

我希望它是那么容易(应该是)。我不确定我是否需要做一些刷新或其他事情,或者把它放在不同的位置。我在好几个地方试过这一行。好像我曾经在某个奇怪的地方给它设置过颜色,但在它所在的地方并不实用。好吧,我只能说谢谢。这是我第一次做一些事情,但我无法理解它背后的代码。我猜第一行会触发cellformatting例程,每个单元格都会触发一个值?稍后我将对该函数进行分析。现在,谢谢!我只是很高兴它能以某种方式工作……终于@user1420914我添加了一个链接、引号和次要描述,以澄清
CellFormatting
事件。但作为回答,是的,第一行将方法处理程序添加到
CellFormatting
事件中。通常,您会在
Form.Designer.cs
类中看到此类代码,因为从设计器连接事件会将代码拖到那里-但是如果您愿意,也可以在构造函数中添加该行。再次感谢。我要是一周前问这个问题就好了!我仍然认为应该有一种方法来通读表格中的所有列,并在表格建成后将它们标记为红色时逐行比较,但我离题了…..当表中有数千条记录时,这似乎是一种更有效的方法。您应该能够在a)手动添加数据完成后立即这样做,或者b)在
DataGridView.DataBindingComplete
事件中为绑定的
数据源
执行此操作。不过,老实说,我不确定效率会如何比较。即使对于数千条记录,
CellFormatting
事件也只在重新绘制的单元格上调用,除非您有一个怪物大小的屏幕和
DataGridView
,否则这应该是最小的。由于代码也是最小的,其影响可以忽略不计-
CellFormatting
将被频繁调用,无论是否添加处理程序。@NuWin它更复杂。要在同一个框中获得多种颜色的文本,需要使用。例如,你可以把它放在自己家里。要使用多种颜色设置文本,请按照。