2010-07-15 210 views
2

我有许多字段,如果数据过期,我想以红色显示数据。根据值更改颜色

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

如果日期小于今天的日期,那么我希望它显示为红色。做这个的最好方式是什么?

编辑 这是我的详细信息视图。它不在网格中。这只是单个分包合同的字段清单。有,保险_GL,保险_AL,保险_WC等不同的领域,而不是一个网格重复的字段。

回答

4

如果值小于零,我会向该字段添加一个类。

所以我不知道是什么类型的HTML元素都包裹你的字段值,但使用的例子,我这​​样做:

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

这实际上取决于您如何在客户端页面中呈现数据。你使用的是一个GridView的asp.net表单吗?你自己为你的数据生成html吗?

我通常用css类去解决这个问题。我有标志项一类,像这样:

.late 
{ 
    color: #f00; 
} 

而且在后面的代码,其中正在生成我的HTML,如果你自己创建的所有HTML:

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

这将为非延迟项目创建<div>Item1</div>,为后期项目创建<div class="late">Item2</div>。如果您希望他们也以某种方式进行设计,您也可以为非迟到的项目设置课程。很简单。

如果您检举的项目是服务器控件,而你没有自己创建HTML,你可以将类分配给他们:

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

如果您的数据绑定到一个GridView,你可以有一个事件处理程序RowDataBound,做这样的事情:

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"; 
    } 
} 

你也可以运用到造型的单个细胞在GridView:

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

希望这些适合您的情况。