Изменить цвет в зависимости от значения - PullRequest
2 голосов
/ 15 июля 2010

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

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

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

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

Ответы [ 2 ]

4 голосов
/ 15 июля 2010

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

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

<span class="<%=(Model.Subcontract.insurance_GL < 0 ? "red" : "black")%>"
  <%= Html.Encode(String.Format("{0:d}", Model.Subcontract.insurance_GL))%>
</span>
3 голосов
/ 15 июля 2010

Это действительно зависит от того, как вы отображаете свои данные на странице клиента.Используете ли вы формы 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";

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

...