Изменить BackColor для DataGridViewCheckBoxColumn при установке или снятии отметки - PullRequest
0 голосов
/ 29 января 2019

1 - Добавьте один DataGridView в Form1 и назовите его DataGridView1.

2 - Скопируйте и вставьте следующий код в код позади.

Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
    Dim myColumn As New DataGridViewCheckBoxColumn With {.ValueType = GetType(Boolean), .Name = "Option", .HeaderText = "Option"}
    myColumn.DefaultCellStyle.SelectionBackColor = System.Drawing.Color.Transparent
    DataGridView1.Columns.Add(myColumn)
    For ii As Integer = 1 To 2
        DataGridView1.Rows.Add({True})
    Next
End Sub
Private Sub DataGridView1_CellFormatting(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellFormattingEventArgs) Handles DataGridView1.CellFormatting
    If DataGridView1.Columns(e.ColumnIndex).Name = "Option" AndAlso DataGridView1.Rows(e.RowIndex).IsNewRow = False Then
        If e.Value = False Then
            e.CellStyle.BackColor = System.Drawing.Color.Red
            'I tried following codes but they are not
            'DataGridView1.Refresh()
            'DataGridView1.Update()
        End If
    End If
End Sub
End Class

3 - Запустите этот проект и снимите галочку с одногоCheckBoxes.

Я хочу видеть красный цвет, как только я нажимаю CheckBox без задержки.

1 Ответ

0 голосов
/ 29 января 2019

Учитывайте эти моменты, чтобы добиться изменения заднего цвета ячейки при проверке, а также удаления выделения выделения:

  1. Чтобы поместить значение флажка в ячейку, вам нужно обработать CellContentClick иCellContentDoubleClick и использование метода DataGridView.CommitEdit(DataGridViewDataErrorContexts) для фиксации изменений в значении ячейки.Без этого значение не будет перемещаться в ячейку до тех пор, пока вы не завершите редактирование.

  2. Чтобы сделать выбранный задний цвет невидимым, вам нужно установить SelectionBackColor ячейки натот же цвет, что и BackColor.

Тогда вы можете получить что-то вроде этого:

enter image description here

ВНапример, я показал 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

Примечание

Вы также можете использоватьрешение, которое описано здесь:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...