如何让DataGridView Row返回颜色进行更改

时间:2011-03-18 18:36:43

标签: .net datagridview

我有一个带

的DataGridView控件
dgridView.DataSource = QueryCustomers(LastName)    // return IList from LINQtoSql

我正在使用以下内容来改变Row BackColor:

Private Sub dgridView_OnPrePaint(ByVal sender As System.Object, ByVal e As DataGridViewRowPrePaintEventArgs) Handles dgridView.RowPrePaint

    Dim dgridRow As DataGridViewRow = dgridView.Rows(e.RowIndex)

    Select Case dgridRow.Cells("Status").Value
        Case "Alpha"
            dgridRow.DefaultCellStyle.BackColor = Color.LightGreen
        Case "Beta"
            dgridRow.DefaultCellStyle.BackColor = Color.LightGreen
        Case "Terminated"
            dgridRow.DefaultCellStyle.BackColor = Color.Salmon
        Case Else
            If currentColor = Color.White Then
                dgridRow.DefaultCellStyle.BackColor = Color.Silver
            Else
                dgridRow.DefaultCellStyle.BackColor = Color.White
            End If

            currentColor = dgridRow.DefaultCellStyle.BackColor
    End Select
End Sub

这似乎有效,但在某些查询中,DataGridView将继续闪烁,直到我编辑一行并保存。通过双击其中一行来执行编辑,从而使WinForm显示在包含DataGridView的主窗体上。一旦我保存数据,数据网格中的数据发生变化,闪烁就会停止。

有没有更好的方法为行着色?每次发生变化时我都不想迭代DataGridView。看起来订阅RowPrePaint事件似乎是要做的事情。我是否需要订阅RowPostPaint?

注意:答案可以是C#或VB.Net。

1 个答案:

答案 0 :(得分:1)

这可能有点太晚了......但是我想在网格填充了每个网格行的循环数据之后进行格式化。

像这样:

  for each dr as datagridviewrow in me.dgridrow.rows
       'condition for each row based on cell's input is put here
      if  dgridRow.Cells("Status").Value = "Alpha" then
          dr.defaultcellstyle.backcolor = color.lightgreen
      end if
   next

是的......希望将来帮助任何人......