DataGridView中的复选框。更改样式。选中单元格的背景色

时间:2018-11-03 16:15:26

标签: vb.net winforms datagridview

我的DataGridViewCheckBoxColumn中有9个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 :(得分:1)

这是一个格式化(演示)问题,因此,您可以使用CellFormatting事件,该事件在DataGridView单元需要显示其Value时引发。

由于您要更改当前格式化的单元格的Style.BackColor,因此最好将单元格DefaultCellStyle插入行的单元格。

验证当前单元格是否符合条件(它是DataGridViewCheckBoxCell,并且Value不为空)。根据需要按e.ColumnIndex或列名进行过滤,以缩小应用此格式的列。

如果全部检查完毕,请将Style.BackColor设置为Color.Yellow(如果已选中(e.Value = True),或者将其设置为DefaultCellStyle.BackColor原始值。
< / p>

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设置为特定的Color(当解析的类型是所需的类型时):

'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