2010-12-13 106 views
9

Necesito distinguir dos celdas consecutivas.Cambiar el color de la celda en diferentes valores - Gridview

Cada uno en una fila, si tienen valores diferentes, cuando los datos contienen los valores a una vista de cuadrícula.

Entonces, si en la fila 1 tengo la celda "ABC" y en la fila 2 tengo la celda "CBA".

Necesito colorear cada celda con un color diferente.

¿Cuál es la mejor manera de hacerlo?

Respuesta

1

puede hacerlo en el evento rowdatabound de gridview. Mantenga la fila anterior en viewstate o sesión y compárela con la siguiente fila. Si no coincide, cambie el color; de lo contrario, no cambie.

+0

Esta solución funciona, usando viewstate para obtener el valor de la última fila. Gracias. –

13

Esto se conoce como el formato condicional

Puede habilitar el evento RowDataBound en el marcado

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

</asp:GridView> 

Y poner esto en su archivo de código subyacente.

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

Esta solución funcionó para mí modificando un poco el código. No usé if (e.Row.RowIndex == 0) ya que mi gridview siempre devuelve 1 fila. También utilicé un bucle for para recorrer todas las celdas de mi gridview –

2

Si lo entiendo bien, quiere cambiar el color de una celda, dependiendo de su valor. si eso es correcto, usted podría tratar de esta manera:

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

Añadir a su gridview en parte HTML de la página OnRowDataBound = "gridView1_DataBinding". Y a continuación, agregue el controlador de evento 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); 
    } 

Best regards, Dima.

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