2016-09-09 158 views
1

我想根據值突出顯示DataGridView行。如果數值被驗證,那麼綠色如果不是然後紅色。
當單元格未被格式化之前,我得到綠色和紅色。但是,當我回到綠色行並更改其未驗證的值時,一個單元格不會變爲紅色。它保持綠色。
看到的圖片:
1)在不輸入任何條目
enter image description here
2)驗證的值
enter image description here
3)回去,並進入了錯誤的值
enter image description here
正如你所看到的只是第一個單元是紅色的,但我希望整行是紅色的。
我在CellValidating事件中格式化單元格。這裏的代碼:
突出顯示DataGridView行

Private Sub dgvItems_CellValidating(sender As Object, e As DataGridViewCellValidatingEventArgs) Handles dgvItems.CellValidating 
    If e.ColumnIndex = ValueColumnIndex Then 
     If Not ValidateValue(e.FormattedValue) Then 
      Me.dgvItems.Rows(e.RowIndex).DefaultCellStyle.BackColor = Color.LightPink 
      Me.dgvItems.DefaultCellStyle.SelectionBackColor = Color.LightPink 
      Me.dgvItems.DefaultCellStyle.SelectionForeColor = Color.Black 
      e.Cancel = True 
     Else 
      Me.dgvItems.DefaultCellStyle.SelectionBackColor = SystemColors.Highlight 
      Me.dgvItems.DefaultCellStyle.SelectionForeColor = SystemColors.HighlightText 
      Me.dgvItems.Rows(rowIndex).DefaultCellStyle.BackColor = Color.LightGreen 
      Me.dgvItems.Rows(rowIndex).DefaultCellStyle.ForeColor = Color.Black 
     End If 
    End If 
End Sub 

任何幫助表示讚賞。謝謝。

回答

1

在DataGridView的屬性上,查找Focus> RowValidating,如下圖所示。

enter image description here

像這樣的東西應該爲你做它。

Sub DataGridView1_RowValidating(ByVal sender As Object, ByVal e As DataGridViewCellCancelEventArgs) 

    Dim drv As DataRowView 
    Dim c As Color 
    If drv.Item("Gender").ToString = "M" Then 
     c = Color.LightBlue 
    Else 
     c = Color.Pink 
    End If 
    e.CellStyle.BackColor = c 

End Sub 
0

如果您想要重新格式化整行,然後使用RowValidating事件處理程序。

如果你想要再整與驗證單個細胞,然後使用CellValidating

行:

Me.dgvItems.DefaultCellStyle.SelectionBackColor = SystemColors.Highlight 

對整個電網的默認單元格樣式全局效果等設置這些變化Load,然後讓你的事件處理程序做你的條件格式。