Учитывайте эти моменты, чтобы добиться изменения заднего цвета ячейки при проверке, а также удаления выделения выделения:
Чтобы поместить значение флажка в ячейку, вам нужно обработать CellContentClick
иCellContentDoubleClick
и использование метода DataGridView.CommitEdit(DataGridViewDataErrorContexts)
для фиксации изменений в значении ячейки.Без этого значение не будет перемещаться в ячейку до тех пор, пока вы не завершите редактирование.
Чтобы сделать выбранный задний цвет невидимым, вам нужно установить SelectionBackColor
ячейки натот же цвет, что и BackColor
.
Тогда вы можете получить что-то вроде этого:
ВНапример, я показал False
как Red
, True
и DbNull.Value
как While
.Вы можете изменить логику в зависимости от ваших требований.Чтобы добиться того, что вы видите в анимации, поместите DataGridView
в форму и вставьте следующий код:
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim table = New DataTable()
table.Columns.Add("C1", GetType(Boolean))
table.Columns.Add("C2", GetType(String))
table.Rows.Add(True, "A")
table.Rows.Add(False, "B")
DataGridView1.DataSource = table
End Sub
Private Sub DataGridView1_CellContentClick(sender As Object,
e As DataGridViewCellEventArgs) _
Handles DataGridView1.CellContentClick, DataGridView1.CellContentDoubleClick
If e.ColumnIndex = 0 AndAlso e.RowIndex >= 0 Then
DataGridView1.CommitEdit(DataGridViewDataErrorContexts.Commit)
DataGridView1.InvalidateCell(e.ColumnIndex, e.RowIndex)
End If
End Sub
Private Sub DataGridView1_CellPainting(sender As Object,
e As DataGridViewCellPaintingEventArgs) _
Handles DataGridView1.CellPainting
If e.ColumnIndex = 0 AndAlso e.RowIndex >= 0 Then
If TypeOf (e.Value) Is Boolean AndAlso e.Value = False Then
e.CellStyle.BackColor = Color.Red
Else
e.CellStyle.BackColor = Color.White
End If
End If
e.CellStyle.SelectionBackColor = e.CellStyle.BackColor
e.CellStyle.SelectionForeColor = e.CellStyle.ForeColor
End Sub
Примечание
Вы также можете использоватьрешение, которое описано здесь: