我有一种方法可以遍历DataGridView
中的每一行并分配所需的ForeColor
,但是不确定为什么我的DataGridView
不接受这些样式吗?这是处理此问题的代码
Private Shared Sub dgvRowFormatting(dgv As DataGridView)
For Each row As DataGridViewRow In dgv.Rows
row.DefaultCellStyle.ForeColor = lColor
Next
End Sub
一旦我将BindingSource
分配给DataGridView DataSource
,就可以通过该方法,如下所示:
bindingSource.DataSource = customerList
dgv.DataSource = bindingSource
dgvRowFormatting(dgv)
我不确定我是否缺少某些东西?
答案 0 :(得分:1)
您只需要在设置DataSource
之前或之后修改RowsDefaultCellStyle。
无需设置每个行的DefaultCellStyle
:
dgv.DataSource = bindingSource
dgv.RowsDefaultCellStyle.ForeColor = lColor
如果要在交替行上设置此值,请使用AlternatingRowsDefaultCellStyle属性:
dgv.DataSource = bindingSource
dgv.AlternatingRowsDefaultCellStyle.ForeColor = lColor
如果要基于某些条件将所有行的单元格更改为不同的ForeColor
,则需要在某处指定这些条件。
Color属性的条件设置器示例:
一个自定义类比较器,用于根据一些预定义的条件将每个ForeColor
的{{1}}中的Cells
更改为不同的值:Row
小于/等于/大于零。
([Column], [Row]).Value
答案 1 :(得分:1)
不建议对单元格或行进行迭代并根据条件设置样式属性,因为这会浪费资源,并且每次更改单个值以确保样式正确时,都必须调用样式方法。
最好使用CellFormatting Event执行此自定义。
为了演示,下面是一个简单的示例,该示例基于偶数/奇数行索引有条件地设置ForeColor。
Private Sub DataGridView1_CellFormatting(sender As Object, e As DataGridViewCellFormattingEventArgs) Handles DataGridView1.CellFormatting
If (e.RowIndex And 1) = 1 Then
e.CellStyle.ForeColor = Color.Red ' odd numbered row
Else
e.CellStyle.ForeColor = Color.Black ' even numbered rows
End If
End Sub
请注意,如果条件只是交替的行,则也可以使用DataGridView.AlternatingRowsDefaultCellStyle Property完成此示例。
有关更多指南,请参见:Best Practices for Scaling the Windows Forms DataGridView Control。
答案 2 :(得分:0)
当然,您可以通过其他方式进行操作(请参阅@Jimi或@TnTinMn的帖子)。
但是您的代码可以正常工作。唯一的办法是将 lColor 更改为正确的颜色,例如: Color.Red
在运行它之前,只需确保在datagridview中填充了一些数据。
您应该在网格视图中看到红色文本。
Private Shared Sub dgvRowFormatting(dgv As DataGridView)
For Each row As DataGridViewRow In dgv.Rows
row.DefaultCellStyle.ForeColor = Color.Red
Next
End Sub
编辑:2018-11-14 17:45
当然所有文字都是红色的。请注意,我们不知道您更改颜色的条件。
这里有一个示例,您的代码根据列ID值更改颜色:
Private Shared Sub dgvRowFormatting(dgv As DataGridView)
For Each row As DataGridViewRow In dgv.Rows
Select Case row.Cells("Id").Value
Case 1, 2
row.DefaultCellStyle.ForeColor = Color.Red
Case 3, 4
row.DefaultCellStyle.ForeColor = Color.Blue
Case Else
row.DefaultCellStyle.ForeColor = Color.Green
End Select
Next
End Sub