首页 文章

Visual Basic Datagrid查看更改行颜色

提问于
浏览
0

对datagrid视图的每次其他更改都可以正常工作,但由于某种原因,行颜色不会改变 .

我调试过,我的应用程序通过循环来改变行颜色 . 此外,我有一个按钮,为数据网格视图提供一个新列表,并相应地为行着色,当我单击按钮时,行颜色更改确实有效!

Public Sub New(measuredValues As List(Of MeasuredValuesModel), valueType As ValueType)
    IsFiltered = False
    ' This call is required by the designer.
    InitializeComponent()
    MeasuredValuesList = measuredValues
    uxGrid.DataSource = MeasuredValuesList
    uxGrid.Columns("StepID").Visible = False
    uxGrid.Font = New Font("Arial", 10, FontStyle.Bold)

    For Each c As DataGridViewColumn In uxGrid.Columns
        Dim Column As DataGridViewColumn = c
        c.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells
    Next

    If valueType = StepItem.ValueType.CalculatedValues Then
        uxButtonFilter.Visible = False
        uxGrid.Columns("DISPOSITION").Visible = False
    End If

    For Each gridRow As DataGridViewRow In uxGrid.Rows
        If gridRow.Cells("PASSFAIL").Value.ToString() = "FAIL" And (gridRow.Cells("DISPOSITION").Value.ToString() = "Y" Or gridRow.Cells("DISPOSITION").Value.ToString() = "N/A") Then
            gridRow.DefaultCellStyle.BackColor = Color.Red
        ElseIf gridRow.Cells("PASSFAIL").Value.ToString() = "FAIL" And (gridRow.Cells("DISPOSITION").Value.ToString() = "N" Or gridRow.Cells("DISPOSITION").Value.ToString() = "N/A") Then
            gridRow.DefaultCellStyle.BackColor = Color.Orange
        End If
    Next
    uxStepID.Text = MeasuredValuesList.FirstOrDefault.StepID
    ' Add any initialization after the InitializeComponent() call.
    'TODO binding
End Sub

这是用于更改行颜色的按钮 . 也许它有效,因为在网格创建后它被按下了?我不太确定 .

Private Sub uxButtonFilter_Click(sender As Object, e As EventArgs) Handles uxButtonFilter.Click
    If IsFiltered = True Then
        uxGrid.DataSource = MeasuredValuesList

        For Each gridRow As DataGridViewRow In uxGrid.Rows
            If gridRow.Cells("PASSFAIL").Value.ToString() = "FAIL" And (gridRow.Cells("DISPOSITION").Value.ToString() = "Y" Or gridRow.Cells("DISPOSITION").Value.ToString() = "N/A") Then
                gridRow.DefaultCellStyle.BackColor = Color.Red
            ElseIf gridRow.Cells("PASSFAIL").Value.ToString() = "FAIL" And (gridRow.Cells("DISPOSITION").Value.ToString() = "N" Or gridRow.Cells("DISPOSITION").Value.ToString() = "N/A") Then
                gridRow.DefaultCellStyle.BackColor = Color.Orange
            End If
        Next

它完全相同的循环但它似乎工作正常,当我使用按钮 .

1 回答

  • 1

    当您尝试重新着色行时,是否可能未完全加载datagridview?

    由于您要设置数据源,因此在确保完成加载后,应该将代码置于影响网格的位置 . 列宽会发生变化,因为它不依赖于网格中的数据,但是您的着色是 .

    捕获uxGrid.databindingComplete事件并尝试着色那里的行

相关问题