2015-06-22 2 views
0

Любое другое изменение в представлении datagrid отлично работает, но по какой-либо причине цвет строки просто не изменится.Visual Basic Datagrid View change color color

Ive отлаживается, и мое приложение проходит цикл, чтобы изменить цвет строки. Также у меня есть кнопка, которая дает представление 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 

Его точно такой же цикл, но он работает нормально, когда я пользуюсь кнопкой.

+0

Вы проверили, что ваш поток программы поступает через 'If..ElseIf' выполнения условий? Попробуйте с помощью 'gridRow.RowsDefaultCellStyle.BackColor' – equisde

+0

Yeh Я отлаживал его, и он набирал 100%. –

+0

И не меняет цвет задней части, когда вы отлаживаете? – equisde

ответ

1

Возможно ли, что ваше изображение datagridview не загружено полностью, когда вы пытаетесь перекрасить строки?

Поскольку вы устанавливаете источник данных, вы должны поместить свой код, который влияет на сетку, после того, как вы сможете убедиться, что она закончила загрузку. Ширины столбцов меняются, потому что они не зависят от данных в сетке, но ваша раскраска.

Поймать событие uxGrid.databindingComplete и попытаться раскраски строк там

+0

Работал отлично, ура! –