2010-07-15 9 views
2

J'ai un certain nombre de champs où je veux afficher les données en rouge si elle a expiré.Changer la couleur en fonction de la valeur

<%= Html.Encode(String.Format("{0:d}", Model.Subcontract.insurance_GL))%>

Si la date est inférieure à la date d'aujourd'hui, alors je veux qu'il affiche en rouge. Quelle est la meilleure façon de procéder?

EDIT Ceci est pour mon avis Détail. Ce n'est pas dans une grille. C'est juste une liste des champs pour le sous-contrat individuel. Il y a, insurance_GL, insurance_AL, insurance_WC, etc. Différents champs, pas le même champ qui se répète dans une grille.

Répondre

4

Je voudrais ajouter une classe au champ si la valeur est inférieure à zéro.

Je ne suis pas sûr de ce que les types d'éléments HTML sont vos valeurs enveloppait de champ, mais en utilisant votre exemple, je ferais ceci:

<span class="<%=(Model.Subcontract.insurance_GL < 0 ? "red" : "black")%>" 
    <%= Html.Encode(String.Format("{0:d}", Model.Subcontract.insurance_GL))%> 
</span> 
3

Cela dépend vraiment de la façon dont vous affichez vos données dans la page du client. Utilisez-vous des formulaires asp.net avec un GridView? Générez-vous le code HTML pour vos données vous-même?

Je vais généralement avec les classes css. Je vais avoir une classe pour les articles marqués d'un indicateur comme celui-ci:

.late 
{ 
    color: #f00; 
} 

Et dans le code derrière, où mon html est généré, si vous créez vous-même le code html:

foreach(Item item in items) 
{ 
    string cls = ""; 
    if (item.IsLate) 
     cls = " class='late'"; 
    html += "<div" + cls + ">" + item.Text + "</div>"; 
} 

Cela créera <div>Item1</div> pour un article non en retard, et <div class="late">Item2</div> pour un article en retard. Vous pouvez également avoir une classe pour les objets non-retardés, si vous voulez qu'ils soient stylés d'une certaine manière aussi. Assez facile.

Si les éléments sont du signalement de contrôles serveur, et vous ne créez pas le code html vous-même, vous pouvez attribuer une classe à eux:

if (item1.IsLate) 
    myTextBox.CssClass = "late"; 

Si vos données est lié à un GridView, vous peut avoir un gestionnaire d'événements pour RowDataBound, et faire quelque chose comme ceci:

protected void gridview_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     Item item = e.Row.DataItem as Item; 
     if (item.IsLate) 
      e.Row.CssClass = "late"; 
    } 
} 

Vous pouvez également appliquer le style à une cellule individuelle dans le GridView:

// 3rd cell 
e.Row.Cells[2].CssClass = "late"; 

Espérons que l'un d'entre eux correspond à votre scénario.

Questions connexes