DataGridView行ForeColor不变

时间:2018-11-14 15:52:48

标签: vb.net datagridview

我有一种方法可以遍历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)

我不确定我是否缺少某些东西?

3 个答案:

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