我有一个带
的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。
答案 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
是的......希望将来帮助任何人......