【问题标题】:DataGridView cell BackColor not formatting correctlyDataGridView 单元格 BackColor 格式不正确
【发布时间】:2017-09-21 08:50:05
【问题描述】:

我的应用中有一个 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

...或其他什么,基本上将相关行返回为默认或替代默认样式?

【问题讨论】:

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

标签: .net vb.net datagridview formatting


【解决方案1】:

您的 sn-ps 没有提供很多上下文。例如,我们不知道您正在使用哪个事件,并且有几个不错的候选者。如果 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

初始结果(黄色Consilk颜色是交替行背景颜色):

然后,如果我更改第二个玫瑰色行的状态,它会正确使用AlternatingBackColor

【讨论】:

    猜你喜欢
    • 2021-04-10
    • 2015-01-31
    • 2013-06-12
    • 2020-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    相关资源
    最近更新 更多