2010-07-15 2 views
2

У меня есть несколько полей, где я хочу отображать данные в красном, если он истек.Изменить цвет на основе значения

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

Если дата меньше текущей даты, то я хочу, чтобы отобразить в красном цвете. Каков наилучший способ сделать это?

EDIT Это мой Detail View. Это не в сетке. Это всего лишь список полей для отдельного субконтракта. Там, insurance_GL, insurance_AL, insurance_WC и т. Д. Различные поля, а не одно и то же поле, повторяющееся в сетке.

ответ

4

Я бы добавил класс в поле, если значение меньше нуля.

Так что я не уверен, какие типы HTML элементов оборачивать ваши значения полей, но с помощью примера я хотел бы сделать это:

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

Это действительно зависит от того, как вы передаете свои данные на странице клиента. Вы используете формы asp.net с помощью GridView? Вы сами генерируете 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"; 

Надеюсь, что один из этих вариантов соответствует вашему сценарию.

Смежные вопросы