【问题标题】:Visual Basic Datagrid View change row colourVisual Basic Datagridview 更改行颜色
【发布时间】:2015-09-07 22:52:40
【问题描述】:

对数据网格视图的所有其他更改都可以正常工作,但由于某种原因,行颜色不会改变。

我已调试,我的应用程序通过循环更改行颜色。 我还有一个按钮,可以为数据网格视图提供一个新列表并相应地为行着色,当我单击该按钮时,行颜色会发生变化!

    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

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

【问题讨论】:

  • 您是否检查过您的程序流程是否通过满足条件的If..ElseIf 进入?试试gridRow.RowsDefaultCellStyle.BackColor
  • 是的,我调试了它,它 100% 进入了那里。
  • 而且调试的时候不改变背景颜色?
  • 不,它真的很奇怪,我已经包含了按钮单击的代码,它可以毫无问题地更改行颜色。
  • 如果您的按钮工作正常并且正在更改颜色,则问题不在If 逻辑上。尝试将您的代码移动到您的表单Load( ) 事件

标签: vb.net datagridview datagrid


【解决方案1】:

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

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

捕捉 uxGrid.databindingComplete 事件并尝试为其中的行着色

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-11
    • 2013-01-09
    • 2011-01-12
    • 2010-11-07
    相关资源
    最近更新 更多