.net DataGridView单元格背景颜色格式不正确

.net DataGridView单元格背景颜色格式不正确,.net,vb.net,datagridview,formatting,.net,Vb.net,Datagridview,Formatting,我的应用程序中有一个datagridview,其中列出了活动作业。 其中一列的状态代码为0-5,行的颜色取决于此值,如下所示 joblist.Rows(e.RowIndex).DefaultCellStyle.BackColor = Color.Aquamarine joblist.Rows(e.RowIndex).DefaultCellStyle.ForeColor = Color.Black 如果状态代码为0,则不应用颜色 这一点基本上可以正常工作,但我发现如果它涉及到

我的应用程序中有一个datagridview,其中列出了活动作业。 其中一列的状态代码为0-5,行的颜色取决于此值,如下所示

     joblist.Rows(e.RowIndex).DefaultCellStyle.BackColor = Color.Aquamarine
     joblist.Rows(e.RowIndex).DefaultCellStyle.ForeColor = Color.Black
如果状态代码为0,则不应用颜色

这一点基本上可以正常工作,但我发现如果它涉及到多个状态为0的作业,这些作业的颜色将与上一个状态为1-5的作业的颜色相同

我可以通过添加

     elseif status=0 then
     joblist.Rows(e.RowIndex).DefaultCellStyle.BackColor = Color.Aquamarine
     joblist.Rows(e.RowIndex).DefaultCellStyle.ForeColor = Color.Black
     end if
然而,这抹去了我的替代行颜色,所以如果有一块白色的,它们就很难阅读

有没有办法让我说些像

  if status=0 then
  joblist.Rows(e.RowIndex).DefaultCellStyle.BackColor = DefaultCellStyle.BackColor
  joblist.Rows(e.RowIndex).DefaultCellStyle.ForeColor = DefaultCellStyle.BackColor

。。。或者无论如何,基本上是将有问题的行返回到默认或替代默认样式?

您的代码片段没有提供太多的上下文。例如,我们不知道您使用的是哪个事件,并且有几个好的候选事件。如果DGV为只读或单元格值无法更改,则可以使用RowPrePaint,因为行颜色将只设置一次。如果它可以改变,那么CellFormatting对我来说更有意义

无论哪种方式,要将它们设置回原来的值,请执行简单的计算并使用DefaultCellStyle颜色。这会将该行的后向颜色MistyRose设置为状态3,或者如果该行更改为其他内容,则将其设置为该行的默认值:

If e.ColumnIndex = 2 Then
    If DirectCast(e.Value, Int32) = 3 Then
        dgv1.Rows(e.RowIndex).DefaultCellStyle.BackColor = Color.MistyRose
    Else
        Dim clr = If(e.RowIndex Mod 2 = 0, dgv1.DefaultCellStyle.BackColor,
                     dgv1.AlternatingRowsDefaultCellStyle.BackColor)
        dgv1.Rows(e.RowIndex).DefaultCellStyle.BackColor = clr
    End If
End If
初始结果淡黄色为交替行背颜色:

然后,如果我更改第二行的状态,它将正确使用AlternatingBackColor:


为了更好地帮助我们重现您看到的问题,请显示实际改变所有状态代码颜色的逻辑-包括存在逻辑的方法。