我的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
答案 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