格式化datagridview中的行

时间:2016-02-19 20:07:47

标签: vb.net datagridview formatting

我有一些datagridview,列出了mysql数据库中的不同位和bob。

其中一个人有一个名为“结果”的专栏。

这可以是'是','待定'或'否'。

我需要根据该值格式化此列表。

我现在正在使用以下内容......

 Private Sub nb_myleads_dgv_CellFormattin(ByVal sender As Object, ByVal e As DataGridViewCellFormattingEventArgs) Handles nb_myleads_dgv.CellFormatting
    If e.ColumnIndex = nb_myleads_dgv.Columns("outcome").Index Then
        If e.Value.ToString = "Yes" Then
            nb_myleads_dgv.Rows(e.RowIndex).DefaultCellStyle.BackColor = Color.DarkGreen
        ElseIf e.Value.ToString = "Pending" Then
            nb_myleads_dgv.Rows(e.RowIndex).DefaultCellStyle.BackColor = Color.DarkOrange
        ElseIf e.Value.ToString = "No" Then
            nb_myleads_dgv.Rows(e.RowIndex).DefaultCellStyle.BackColor = Color.DarkRed
        End If
 End sub


    End If

似乎我必须在DGV中显示我的列'结果'才能使其工作。 通过将此列宽设置为3像素,我已经解决了这个问题,但这看起来有点脏。是否无法根据隐藏列的值格式化datagridview中的单元格?

提前致谢

2 个答案:

答案 0 :(得分:0)

我相信你的问题是细胞必须是可见的,否则它永远不会传递if语句。

  

每次单元格被绘制时都会发生CellFormatting事件,因此   处理此事件时应避免冗长处理。这个   当检索到FormattedValue单元格或其时,也会发生事件   调用GetFormattedValue方法。

Link

我会摆脱这个if语句并做这样的事情:

        Dim str as string = dataGridView1.Rows[e.RowIndex].Cells["outcome"].Value.ToString
        If str = "Yes" Then
            nb_myleads_dgv.Rows(e.RowIndex).DefaultCellStyle.BackColor = Color.DarkGreen
        ElseIf str = "Pending" Then
            nb_myleads_dgv.Rows(e.RowIndex).DefaultCellStyle.BackColor = Color.DarkOrange
        ElseIf str = "No" Then
            nb_myleads_dgv.Rows(e.RowIndex).DefaultCellStyle.BackColor = Color.DarkRed
        End If

答案 1 :(得分:0)

为什么不循环遍历带有for的行,并根据单元格值进行着色。它是否可见无关紧要。

    For Each row As DataGridViewRow In DataGridView1.Rows
        If Not row.IsNewRow Then
            Select Case row.Cells(2).Value.ToString
                Case "Yes"
                    row.DefaultCellStyle.BackColor = Color.DarkGreen
                Case "Pending"
                    row.DefaultCellStyle.BackColor = Color.DarkOrange
                Case "No"
                    row.DefaultCellStyle.BackColor = Color.DarkRed

            End Select
        End If
    Next

在这种情况下,第3列(单元格(2)被隐藏。您可以在填充网格后而不是在单元格格式中执行此操作