.net DataGridView单元格背景颜色格式不正确
我的应用程序中有一个datagridview,其中列出了活动作业。 其中一列的状态代码为0-5,行的颜色取决于此值,如下所示.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,则不应用颜色 这一点基本上可以正常工作,但我发现如果它涉及到
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:
为了更好地帮助我们重现您看到的问题,请显示实际改变所有状态代码颜色的逻辑-包括存在逻辑的方法。