2010-12-13 7 views
9

Je dois distinguer deux cellules consécutives.Changer la couleur de la cellule sur différentes valeurs - Gridview

Chaque ligne d'affilée, si elles ont des valeurs différentes, lors de la databindind les valeurs à une grille. Donc, si dans la rangée 1 j'ai la cellule "ABC" et dans la rangée 2 j'ai la cellule "CBA".

J'ai besoin de colorer chaque cellule avec une couleur différente.

Quelle est la meilleure façon de le faire?

Répondre

1

vous pouvez le faire sur l'événement rowdatabound de la grille. Gardez la ligne précédente dans viewstate ou session et faites correspondre avec la ligne suivante. Si ce n'est pas le cas, changez la couleur sinon ne changez pas.

+0

Cette solution fonctionne en utilisant viewstate pour obtenir la dernière valeur de ligne. Je vous remercie. –

13

Ceci est appelé Mise en forme conditionnelle

Vous pouvez activer l'événement RowDataBound dans le balisage

<asp:GridView ID="gridview1" runat="server" OnRowDataBound="RowDataBound"> 

</asp:GridView> 

Et mettre dans votre fichier code-behind.

protected void RowDataBound(Object sender, GridViewRowEventArgs e) 
{ 
    if(e.Row.RowType == DataControlRowType.DataRow) 
    { 
     if(e.Row.RowIndex == 0)  // This is row no.1 
      if(e.Row.Cells[0].Text == "ABC") 
       e.Row.Cells[0].BackColor = Color.Red; 

     if(e.Row.RowIndex == 1)  // This is row no.2 
      if(e.Row.Cells[0].Text == "CBA") 
       e.Row.Cells[0].BackColor = Color.Green; 
    } 
} 
+0

Cette solution a fonctionné pour moi en peaufinant un peu le code. Je n'ai pas utilisé if (e.RowIndex == 0) car ma grille renvoie toujours 1 ligne. J'ai également utilisé une boucle for pour parcourir toutes les cellules de ma grille –

2

Si je vous comprends bien, vous voulez changer la couleur d'une cellule, en fonction de sa valeur. si c'est exact, vous pouvez essayer comme ceci:

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     if ((Label)e.Row.Cells[0].FindControl("ValueHoldingControl").Text == "ABC") 
     { 
      //Coloring the cell 
     } 
    } 
} 
4

Ajouter à votre gridview en partie html de la page OnRowDataBound = "gridView1_DataBinding". Et puis ajoutez le gestionnaire d'événement codebehind:

protected void gridView1_DataBinding(object sender, GridViewRowEventArgs e) 
    { 

     if (e.Row.RowType != DataControlRowType.DataRow) return; 

     var c = e.Row.FindControl("IdOfControl") as Label; 
     if(c != null) 
     { 
      if (c.Text == "ABC") 
       e.Row.BackColor = GetColor("Gray"); 

      if (c.Text == "BCA") 
       e.Row.BackColor = GetColor("Green"); 
     } 
    } 

    private Color GetColor(string color) 
    { 
     return Color.FromName(color); 
    } 

Cordialement, Dima.

0
void gvShowFullDetail_RowDataBound(object sender, GridViewRowEventArgs e) 
    { 
     if (e.Row.RowType == DataControlRowType.DataRow) 
     { 
      e.Row.BackColor = System.Drawing.ColorTranslator.FromHtml("#AECD6F"); 
     } 
    } 
Questions connexes