2010-05-08 5 views

Répondre

2

s'il vous plaît essayer cela et laissez-moi savoir quelle question vous faites face à

protected void grdStudent_RowDataBound(object sender, System.Web.UI.WebControls.GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     DataRow dr = ((DataRowView)e.Row.DataItem).Row; 
     if (dr["Present"].ToString() == "A") 
     { 
      ((Label)e.Row.FindControl("yourLableID")).ForeColor= System.Drawing.Color.Red; 
     //yourLableID is that lable in which you are showing A or P 
     } 
    } 
} 
2

Ma façon préférée est de définir la couleur dans le balisage,

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false"> 
     <Columns> 
     <asp:TemplateField> 
     <ItemTemplate> 
      <asp:Label runat="server" ID="lblStatus" 
       Text='<%# Eval("Status") %>' 
       ForeColor='<%# GetItemColor(Eval("Status")) %>' /> 
     </ItemTemplate> 
     </asp:TemplateField> 
     </Columns> 
     </asp:GridView> 

basé sur une méthode dans le code derrière

protected System.Drawing.Color GetForeColor(object statusObj) 
{ 
    System.Drawing.Color color = System.Drawing.Color.Black; 

    switch ((string)statusObj) 
    { 
     case "A": color = System.Drawing.Color.Red; break; 
     case "P": color = System.Drawing.Color.Green; break; 
     case "L": color = System.Drawing.Color.Yellow; break; 
    } 

    return color; 
} 

Sinon, vous pouvez mettre directement la logique dans le balisage, mais je préfère garder autant du code C# dans le fichier .cs.
De plus, asp: TemplateField vous offre plus de flexibilité que asp: BoundField.

Vous pouvez également définir la propriété BackColor pour une meilleure visibilité, mais mon favori est l'ajout d'un petit asp: Image, où la propriété ImageUrl est commuté de la même manière, entre 3 images représentant le statut.

Questions connexes