2017-09-29 5 views
0

Salut J'essaie de modifier la couleur de retour des lignes de la grille de données. J'ai réussi à faire cela pour une grille, mais pour une raison quelconque, une autre grille de données ne fonctionne pas.Lignes de couleur DataGridView

Les vues de données sont placées sur 2 onglets différents à l'aide de l'onglet Contrôle. Cela fonctionne parfaitement pour dgvTickets mais ne fonctionne pas pour dgvFXTickets. L'index de la cellule est correct car je l'ai vérifié pendant le débogage. Toute aide est la bienvenue.

 dgvFXTickets.AutoGenerateColumns = true; 
     dgvFXTickets.DataSource = new DataAccess.FinanceData().getFXTicketsByDate(dateTimePicker1.Value).ToList(); 

     dgvTickets.AutoGenerateColumns = true; 
     dgvTickets.DataSource = new DataAccess.FinanceData().getTicketsByDate(dateTimePicker1.Value).ToList(); 


     foreach (DataGridViewRow r in dgvTickets.Rows) 
     { 
      if (r.Cells[8].Value.ToString() == "Completed") 
      { 
       r.DefaultCellStyle.BackColor = Color.LightGreen; 
      } 

      else if (r.Cells[8].Value.ToString() == "Cancelled") 
      { 
       r.DefaultCellStyle.BackColor = Color.LightPink; 
      } 
     } 

     foreach (DataGridViewRow rFX in dgvFXTickets.Rows) 
     { 
      if (rFX.Cells[12].Value.ToString() == "Completed") 
      { 
       rFX.DefaultCellStyle.BackColor = Color.LightGreen; 
      } 

      else if (rFX.Cells[12].Value.ToString() == "Cancelled") 
      { 
       rFX.DefaultCellStyle.BackColor = Color.LightPink; 
      } 
     } 
+1

Essayez d'utiliser le débogueur et vérifier quelle est la valeur de _rFX.Cells [12] _ lorsque votre code entre dans la deuxième boucle – Steve

+0

@ Steve l'a fait et le code va dans la partie terminée et annulée mais ne change toujours pas de couleur. –

Répondre

0

La page d'onglet doit être sélectionnée avant d'affecter des codes de couleur.

tabControl1.SelectedTab = 0; //select first tab page  
foreach (DataGridViewRow r in dgvTickets.Rows) 
{ 
     if (r.Cells[8].Value.ToString() == "Completed") 
     { 
      r.DefaultCellStyle.BackColor = Color.LightGreen; 
     } 

     else if (r.Cells[8].Value.ToString() == "Cancelled") 
     { 
      r.DefaultCellStyle.BackColor = Color.LightPink; 
     } 
    } 

tabControl1.SelectedTab = 1 //select second tab 
foreach (DataGridViewRow rFX in dgvFXTickets.Rows) 
    { 
     if (rFX.Cells[12].Value.ToString() == "Completed") 
     { 
      rFX.DefaultCellStyle.BackColor = Color.LightGreen; 
     } 

     else if (rFX.Cells[12].Value.ToString() == "Cancelled") 
     { 
      rFX.DefaultCellStyle.BackColor = Color.LightPink; 
     } 
    } 

Hope this helps

1

Cela est arrivé parce qu'un contrôle databound est pas mis à jour jusqu'à ce que le contrôle est rendu visible.

J'utilise ce code de la charge de forme pour éviter ce problème:

Private Sub frmForm1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 

    For Each tabPage As TabPage In Me.tabTabControl1.TabPages 
     tabPage.Show() 
    Next tabPage 

End Sub