Флажки в DataGridView. Изменить стиль. Цвет проверенных ячеек - PullRequest
0 голосов
/ 03 ноября 2018

У меня 9 DataGridViewCheckBoxColumn с в моем DataGridView.
Я хотел бы, чтобы цвет фона отмеченных ячеек был изменен на желтый и обратно на белый, если не отмечен.

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

Private Sub dgCustomerNumber_CurrentCellChanged(sender As Object, e As EventArgs) Handles dgCustomerNumber.CurrentCellChanged

    For Each row As DataGridViewRow In Me.dgCustomerNumber.Rows
        Dim checked As Boolean = CType(row.Cells("PrintImaLabelsDataGridViewTextBoxColumn").Value, Boolean)
        If checked Then
            row.DefaultCellStyle.BackColor = Color.Yellow
        Else
            row.DefaultCellStyle.BackColor = Color.White
        End If

    Next
End Sub

enter image description here

1 Ответ

0 голосов
/ 03 ноября 2018

Это вопрос форматирования (представления), поэтому вы можете использовать событие CellFormatting , которое возникает, когда ячейке DataGridView необходимо отобразить ее Value.

.

Поскольку вы хотите изменить Style.BackColor текущей отформатированной ячейки, лучше установить ячейку DefaultCellStyle вместо строки.

Убедитесь, что текущая ячейка соответствует критериям (это DataGridViewCheckBoxCell и Value не равно нулю). Отфильтруйте по e.ColumnIndex или имени столбца, если необходимо, чтобы сузить столбцы, к которым применяется это форматирование.

Если все это подтвердится, установите Style.BackColor либо на Color.Yellow, если он отмечен (e.Value = True), либо верните исходное значение DefaultCellStyle.BackColor.

Private Sub dgCustomerNumber_CellFormatting(sender As Object, e As DataGridViewCellFormattingEventArgs) Handles dgCustomerNumber.CellFormatting
    If e.Value IsNot Nothing AndAlso TypeOf dgCustomerNumber.Columns(e.ColumnIndex).CellTemplate Is DataGridViewCheckBoxCell Then
        dgCustomerNumber(e.ColumnIndex, e.RowIndex).Style.BackColor =
            If(CType(e.Value, Boolean),
                Color.Yellow,
                dgCustomerNumber.Columns(e.ColumnIndex).DefaultCellStyle.BackColor)
    End If
End Sub

Редактировать
Определите во время выполнения пользовательский задний цвет ячейки для DataGridViewCheckBoxColumns.

После того, как вы установили DataGridView.DataSource, проанализируйте автоматически сгенерированный Columns и установите DefaultCellStyle.BackColor на определенный цвет, когда анализируемый тип является желаемым:

'Set the DataSource
DataGridView1.DataSource = [MyDataSource]

For Each col As DataGridViewColumn In DataGridView1.Columns
    If TypeOf col Is DataGridViewCheckBoxColumn Then
        col.DefaultCellStyle.BackColor = Color.Magenta
    End If
Next
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...