2010-12-13 23 views
9

Devo distinguere due celle consecutive.Cambia colore cella su valori diversi - Gridview

Ogni riga di una riga, se hanno valori diversi, quando i dati sono associati a un gridview.

Quindi, se nella riga 1 ho la cella "ABC" e nella riga 2 ho la cella "CBA".

Ho bisogno di colorare ogni cella con un colore diverso.

Qual è il modo migliore per farlo?

risposta

1

è possibile farlo sull'evento rowdatabound di gridview. Mantieni la riga precedente in viewstate o sessione e abbinala alla riga successiva. Se non corrisponde, cambiare il colore altrimenti non cambiare.

+0

Queste soluzioni funzionano, utilizzando il viewstate per ottenere l'ultimo valore di riga. Grazie. –

13

Questo si chiama formattazione condizionale

È possibile attivare l'RowDataBound evento nel markup

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

</asp:GridView> 

e mettere questo nel vostro file 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

Questa soluzione ha funzionato per me modificando leggermente il codice. Non l'ho usato se (e.Row.RowIndex == 0) poiché il mio gridview restituisce sempre 1 riga. Ho anche usato un ciclo for per attraversare tutte le celle nel mio gridview –

2

se ho capito bene, vuoi cambiare il colore di una cella, a seconda del suo valore. se questo è corretto, si potrebbe provare in questo modo:

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

Aggiungi al tuo GridView in parte html della pagina OnRowDataBound = "gridView1_DataBinding". E quindi aggiungi gestore di eventi 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); 
    } 

Cordiali saluti, Dima.

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